scsi: Suppress gcc 7 fall-through warnings reported with W=1
authorBart Van Assche <bart.vanassche@wdc.com>
Fri, 25 Aug 2017 20:46:29 +0000 (13:46 -0700)
committerMartin K. Petersen <martin.petersen@oracle.com>
Fri, 25 Aug 2017 21:08:07 +0000 (17:08 -0400)
The conclusion of a recent discussion about the new warnings
reported by gcc 7 is that the new warnings reported when building
with W=1 should be suppressed. However, gcc 7 still warns about
fall-through in switch statements when building with W=1. Suppress
these warnings by annotating the SCSI core properly.

See also Linus Torvalds, Lots of new warnings with gcc-7.1.1, 11
July 2017 (https://www.mail-archive.com/linux-media@vger.kernel.org/msg115428.html).

References: commit bd664f6b3e37 ("disable new gcc-7.1.1 warnings for now")
Signed-off-by: Bart Van Assche <bart.vanassche@wdc.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Cc: Hannes Reinecke <hare@suse.com>
Cc: Johannes Thumshirn <jthumshirn@suse.de>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/scsi_error.c
drivers/scsi/scsi_ioctl.c

index ea9f40e51f684ea530dae52b7a17d0a1f45b695c..01b2d2055edf5d1d0eaf33710c30433a552fa98d 100644 (file)
@@ -552,6 +552,7 @@ int scsi_check_sense(struct scsi_cmnd *scmd)
                        set_host_byte(scmd, DID_ALLOC_FAILURE);
                        return SUCCESS;
                }
+               /* FALLTHROUGH */
        case COPY_ABORTED:
        case VOLUME_OVERFLOW:
        case MISCOMPARE:
@@ -573,6 +574,7 @@ int scsi_check_sense(struct scsi_cmnd *scmd)
                        return ADD_TO_MLQUEUE;
                else
                        set_host_byte(scmd, DID_TARGET_FAILURE);
+               /* FALLTHROUGH */
 
        case ILLEGAL_REQUEST:
                if (sshdr.asc == 0x20 || /* Invalid command operation code */
@@ -683,6 +685,7 @@ static int scsi_eh_completed_normally(struct scsi_cmnd *scmd)
        switch (status_byte(scmd->result)) {
        case GOOD:
                scsi_handle_queue_ramp_up(scmd->device);
+               /* FALLTHROUGH */
        case COMMAND_TERMINATED:
                return SUCCESS;
        case CHECK_CONDITION:
@@ -1734,6 +1737,7 @@ int scsi_decide_disposition(struct scsi_cmnd *scmd)
                        set_host_byte(scmd, DID_TIME_OUT);
                        return SUCCESS;
                }
+               /* FALLTHROUGH */
        case DID_NO_CONNECT:
        case DID_BAD_TARGET:
                /*
@@ -1819,6 +1823,7 @@ int scsi_decide_disposition(struct scsi_cmnd *scmd)
                 * the case of trying to send too many commands to a
                 * tagged queueing device.
                 */
+               /* FALLTHROUGH */
        case BUSY:
                /*
                 * device can't talk to us at the moment.  Should only
@@ -1831,6 +1836,7 @@ int scsi_decide_disposition(struct scsi_cmnd *scmd)
                if (scmd->cmnd[0] == REPORT_LUNS)
                        scmd->device->sdev_target->expecting_lun_change = 0;
                scsi_handle_queue_ramp_up(scmd->device);
+               /* FALLTHROUGH */
        case COMMAND_TERMINATED:
                return SUCCESS;
        case TASK_ABORTED:
@@ -2320,8 +2326,8 @@ scsi_ioctl_reset(struct scsi_device *dev, int __user *arg)
                rtn = scsi_try_host_reset(scmd);
                if (rtn == SUCCESS)
                        break;
-       default:
                /* FALLTHROUGH */
+       default:
                rtn = FAILED;
                break;
        }
index b6bf3f29a12a4e807f86e1a1025e9907f23ddd1e..0a875491f5a7621d59268217890c973ab6047083 100644 (file)
@@ -116,13 +116,15 @@ static int ioctl_internal_command(struct scsi_device *sdev, char *cmd,
                case NOT_READY: /* This happens if there is no disc in drive */
                        if (sdev->removable)
                                break;
+                       /* FALLTHROUGH */
                case UNIT_ATTENTION:
                        if (sdev->removable) {
                                sdev->changed = 1;
                                result = 0;     /* This is no longer considered an error */
                                break;
                        }
-               default:        /* Fall through for non-removable media */
+                       /* FALLTHROUGH -- for non-removable media */
+               default:
                        sdev_printk(KERN_INFO, sdev,
                                    "ioctl_internal_command return code = %x\n",
                                    result);