scsi: make the sense header argument to scsi_test_unit_ready mandatory
authorChristoph Hellwig <hch@lst.de>
Tue, 14 Feb 2017 19:15:57 +0000 (20:15 +0100)
committerMartin K. Petersen <martin.petersen@oracle.com>
Thu, 23 Feb 2017 00:35:24 +0000 (19:35 -0500)
It's a tiny structure that can be allocated on the stack, don't
complicate the code by making it optional.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/osd/osd_uld.c
drivers/scsi/scsi_ioctl.c
drivers/scsi/scsi_lib.c

index 243eab3d10d094e6dffff35f793f1c518e49fc15..e0ce5d2fd14d29656ab5409b9356217118ce0a98 100644 (file)
@@ -372,6 +372,7 @@ EXPORT_SYMBOL(osduld_device_same);
 static int __detect_osd(struct osd_uld_device *oud)
 {
        struct scsi_device *scsi_device = oud->od.scsi_device;
+       struct scsi_sense_hdr sense_hdr;
        char caps[OSD_CAP_LEN];
        int error;
 
@@ -380,7 +381,7 @@ static int __detect_osd(struct osd_uld_device *oud)
         */
        OSD_DEBUG("start scsi_test_unit_ready %p %p %p\n",
                        oud, scsi_device, scsi_device->request_queue);
-       error = scsi_test_unit_ready(scsi_device, 10*HZ, 5, NULL);
+       error = scsi_test_unit_ready(scsi_device, 10*HZ, 5, &sense_hdr);
        if (error)
                OSD_ERR("warning: scsi_test_unit_ready failed\n");
 
index 8b8c814df5c75dfa87bdbb3b2c74e3cac536199c..b6bf3f29a12a4e807f86e1a1025e9907f23ddd1e 100644 (file)
@@ -199,6 +199,7 @@ static int scsi_ioctl_get_pci(struct scsi_device *sdev, void __user *arg)
 int scsi_ioctl(struct scsi_device *sdev, int cmd, void __user *arg)
 {
        char scsi_cmd[MAX_COMMAND_SIZE];
+       struct scsi_sense_hdr sense_hdr;
 
        /* Check for deprecated ioctls ... all the ioctls which don't
         * follow the new unique numbering scheme are deprecated */
@@ -243,7 +244,7 @@ int scsi_ioctl(struct scsi_device *sdev, int cmd, void __user *arg)
                return scsi_set_medium_removal(sdev, SCSI_REMOVAL_ALLOW);
        case SCSI_IOCTL_TEST_UNIT_READY:
                return scsi_test_unit_ready(sdev, IOCTL_NORMAL_TIMEOUT,
-                                           NORMAL_RETRIES, NULL);
+                                           NORMAL_RETRIES, &sense_hdr);
        case SCSI_IOCTL_START_UNIT:
                scsi_cmd[0] = START_STOP;
                scsi_cmd[1] = 0;
index 39b2d727f033ef0c2b39502549fb8e61c01d41c2..a3c7ec1795c9e457da769b2941162f04fa53bd37 100644 (file)
@@ -2520,28 +2520,20 @@ EXPORT_SYMBOL(scsi_mode_sense);
  *     @sdev:  scsi device to change the state of.
  *     @timeout: command timeout
  *     @retries: number of retries before failing
- *     @sshdr_external: Optional pointer to struct scsi_sense_hdr for
- *             returning sense. Make sure that this is cleared before passing
- *             in.
+ *     @sshdr: outpout pointer for decoded sense information.
  *
  *     Returns zero if unsuccessful or an error if TUR failed.  For
  *     removable media, UNIT_ATTENTION sets ->changed flag.
  **/
 int
 scsi_test_unit_ready(struct scsi_device *sdev, int timeout, int retries,
-                    struct scsi_sense_hdr *sshdr_external)
+                    struct scsi_sense_hdr *sshdr)
 {
        char cmd[] = {
                TEST_UNIT_READY, 0, 0, 0, 0, 0,
        };
-       struct scsi_sense_hdr *sshdr;
        int result;
 
-       if (!sshdr_external)
-               sshdr = kzalloc(sizeof(*sshdr), GFP_KERNEL);
-       else
-               sshdr = sshdr_external;
-
        /* try to eat the UNIT_ATTENTION if there are enough retries */
        do {
                result = scsi_execute_req(sdev, cmd, DMA_NONE, NULL, 0, sshdr,
@@ -2552,8 +2544,6 @@ scsi_test_unit_ready(struct scsi_device *sdev, int timeout, int retries,
        } while (scsi_sense_valid(sshdr) &&
                 sshdr->sense_key == UNIT_ATTENTION && --retries);
 
-       if (!sshdr_external)
-               kfree(sshdr);
        return result;
 }
 EXPORT_SYMBOL(scsi_test_unit_ready);