]> git.karo-electronics.de Git - linux-beck.git/commitdiff
hpsa: return failed from device reset/abort handlers
authorDon Brace <don.brace@pmcs.com>
Fri, 23 Jan 2015 22:44:24 +0000 (16:44 -0600)
committerJames Bottomley <JBottomley@Parallels.com>
Mon, 2 Feb 2015 17:57:42 +0000 (09:57 -0800)
Returning failed from the device reset handler will get the device
kicked offline, which is fine if the controller is locked up anyhow.

Cannot abort a command from a failed controller.

Reviewed-by: Scott Teel <scott.teel@pmcs.com>
Reviewed-by: Justin Lindley <justin.lindley@pmcs.com>
Signed-off-by: Don Brace <don.brace@pmcs.com>
Signed-off-by: Christoph Hellwig <hch@lst.de>
drivers/scsi/hpsa.c

index 834ac78c51a3cc233c43f6f721702747f65bbfa3..a02ea7f43d675c03586d961e614aa522b6ae9b46 100644 (file)
@@ -4343,6 +4343,10 @@ static int hpsa_eh_device_reset_handler(struct scsi_cmnd *scsicmd)
        h = sdev_to_hba(scsicmd->device);
        if (h == NULL) /* paranoia */
                return FAILED;
+
+       if (lockup_detected(h))
+               return FAILED;
+
        dev = scsicmd->device->hostdata;
        if (!dev) {
                dev_err(&h->pdev->dev, "hpsa_eh_device_reset_handler: "
@@ -4566,6 +4570,9 @@ static int hpsa_eh_abort_handler(struct scsi_cmnd *sc)
                        "ABORT REQUEST FAILED, Controller lookup failed.\n"))
                return FAILED;
 
+       if (lockup_detected(h))
+               return FAILED;
+
        /* Check that controller supports some kind of task abort */
        if (!(HPSATMF_PHYS_TASK_ABORT & h->TMFSupportFlags) &&
                !(HPSATMF_LOG_TASK_ABORT & h->TMFSupportFlags))