aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeff Skirvin <jeffrey.d.skirvin@intel.com>2011-03-08 20:32:16 -0700
committerDan Williams <dan.j.williams@intel.com>2011-07-03 03:55:30 -0700
commit6e2802a7fc246b53f919efbf1c011da2d0a4ff30 (patch)
treee6d21e48ae88569583b0dd67bc7c7e9459a1c4ae
parentaa14510295d3d87431c915c0b2bc5dd3af7f2c35 (diff)
isci: All pending requests are terminated before stopping the device.
Make sure all pending I/O including any in the libsas error handler process is cleaned-up. Signed-off-by: Jeff Skirvin <jeffrey.d.skirvin@intel.com> Signed-off-by: Dan Williams <dan.j.williams@intel.com>
-rw-r--r--drivers/scsi/isci/remote_device.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/drivers/scsi/isci/remote_device.c b/drivers/scsi/isci/remote_device.c
index 1dae2184b9e..6fe6815e4b7 100644
--- a/drivers/scsi/isci/remote_device.c
+++ b/drivers/scsi/isci/remote_device.c
@@ -380,6 +380,10 @@ enum sci_status isci_remote_device_stop(struct isci_host *ihost, struct isci_rem
"%s: isci_device = %p\n", __func__, idev);
isci_remote_device_change_state(idev, isci_stopping);
+
+ /* Kill all outstanding requests. */
+ isci_remote_device_nuke_requests(idev);
+
set_bit(IDEV_STOP_PENDING, &idev->flags);
spin_lock_irqsave(&ihost->scic_lock, flags);