]> err.no Git - linux-2.6/commitdiff
[SCSI] ipr: Proper return codes for eh_dev_reset for SATA devices
authorBrian King <brking@linux.vnet.ibm.com>
Wed, 9 May 2007 20:36:35 +0000 (15:36 -0500)
committerJames Bottomley <jejb@mulgrave.il.steeleye.com>
Wed, 16 May 2007 16:39:33 +0000 (12:39 -0400)
Currently ipr always returns success from eh_dev_reset when
called for a SATA device. If ata_do_eh is unable to recover
for some reason, this can result in commands that are still
outstanding when ata_do_eh returns. Change ipr to verify no
commands are outstanding before returning success.

Signed-off-by: Brian King <brking@linux.vnet.ibm.com>
Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
drivers/scsi/ipr.c

index 4baa79e686794ba5915717c2998860b6031fd91b..fa6ff295e5683b544ceea30250de287fbdb362d6 100644 (file)
@@ -3954,6 +3954,13 @@ static int __ipr_eh_dev_reset(struct scsi_cmnd * scsi_cmd)
                spin_unlock_irq(scsi_cmd->device->host->host_lock);
                ata_do_eh(ap, NULL, NULL, ipr_sata_reset, NULL);
                spin_lock_irq(scsi_cmd->device->host->host_lock);
+
+               list_for_each_entry(ipr_cmd, &ioa_cfg->pending_q, queue) {
+                       if (ipr_cmd->ioarcb.res_handle == res->cfgte.res_handle) {
+                               rc = -EIO;
+                               break;
+                       }
+               }
        } else
                rc = ipr_device_reset(ioa_cfg, res);
        res->resetting_device = 0;