scsi: scsi_dh_alua: Check for negative result value
authorHannes Reinecke <hare@suse.de>
Tue, 27 Apr 2021 08:30:11 +0000 (10:30 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 20 Jul 2021 14:05:40 +0000 (16:05 +0200)
[ Upstream commit 7e26e3ea028740f934477ec01ba586ab033c35aa ]

scsi_execute() will now return a negative error if there was an error prior
to command submission; evaluate that instead if checking for DRIVER_ERROR.

[mkp: build fix]

Link: https://lore.kernel.org/r/20210427083046.31620-6-hare@suse.de
Signed-off-by: Hannes Reinecke <hare@suse.de>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/scsi/device_handler/scsi_dh_alua.c

index df5a3bb..4743317 100644 (file)
@@ -548,12 +548,12 @@ static int alua_rtpg(struct scsi_device *sdev, struct alua_port_group *pg)
                        kfree(buff);
                        return SCSI_DH_OK;
                }
-               if (!scsi_sense_valid(&sense_hdr)) {
+               if (retval < 0 || !scsi_sense_valid(&sense_hdr)) {
                        sdev_printk(KERN_INFO, sdev,
                                    "%s: rtpg failed, result %d\n",
                                    ALUA_DH_NAME, retval);
                        kfree(buff);
-                       if (driver_byte(retval) == DRIVER_ERROR)
+                       if (retval < 0)
                                return SCSI_DH_DEV_TEMP_BUSY;
                        return SCSI_DH_IO;
                }
@@ -775,11 +775,11 @@ static unsigned alua_stpg(struct scsi_device *sdev, struct alua_port_group *pg)
        retval = submit_stpg(sdev, pg->group_id, &sense_hdr);
 
        if (retval) {
-               if (!scsi_sense_valid(&sense_hdr)) {
+               if (retval < 0 || !scsi_sense_valid(&sense_hdr)) {
                        sdev_printk(KERN_INFO, sdev,
                                    "%s: stpg failed, result %d",
                                    ALUA_DH_NAME, retval);
-                       if (driver_byte(retval) == DRIVER_ERROR)
+                       if (retval < 0)
                                return SCSI_DH_DEV_TEMP_BUSY;
                } else {
                        sdev_printk(KERN_INFO, sdev, "%s: stpg failed\n",