diff options
author | Dan Williams <dan.j.williams@intel.com> | 2011-12-12 23:32:09 -0500 |
---|---|---|
committer | James Bottomley <JBottomley@Parallels.com> | 2012-02-29 16:16:52 -0500 |
commit | 5a998328296cb16cb8b0307a402a0f2feab533c5 (patch) | |
tree | 25c3a355256a895189d993b8b45ce029e5eab204 | |
parent | 6a719391e4a13d5fa2ec7642ef0c780d7f3f5716 (diff) |
[SCSI] isci: remove IDEV_EH hack to disable "discovery-time" ata resets
Prior to commit 61aaff49 "isci: filter broadcast change notifications
during SMP phy resets" we borrowed the MVS_DEV_EH approach from the
mvsas driver for preventing ->lldd_I_T_nexus_reset() events during ata
discovery. This hack was protecting against the old ->phy_reset() in
ata_bus_probe(), but since the conversion to the new error handling this
hack is preventing resets from reaching ata devices.
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
-rw-r--r-- | drivers/scsi/isci/remote_device.c | 1 | ||||
-rw-r--r-- | drivers/scsi/isci/remote_device.h | 7 | ||||
-rw-r--r-- | drivers/scsi/isci/task.c | 9 |
3 files changed, 7 insertions, 10 deletions
diff --git a/drivers/scsi/isci/remote_device.c b/drivers/scsi/isci/remote_device.c index 108238d4510d..934d21ea14e7 100644 --- a/drivers/scsi/isci/remote_device.c +++ b/drivers/scsi/isci/remote_device.c | |||
@@ -1308,7 +1308,6 @@ void isci_remote_device_release(struct kref *kref) | |||
1308 | clear_bit(IDEV_STOP_PENDING, &idev->flags); | 1308 | clear_bit(IDEV_STOP_PENDING, &idev->flags); |
1309 | clear_bit(IDEV_IO_READY, &idev->flags); | 1309 | clear_bit(IDEV_IO_READY, &idev->flags); |
1310 | clear_bit(IDEV_GONE, &idev->flags); | 1310 | clear_bit(IDEV_GONE, &idev->flags); |
1311 | clear_bit(IDEV_EH, &idev->flags); | ||
1312 | smp_mb__before_clear_bit(); | 1311 | smp_mb__before_clear_bit(); |
1313 | clear_bit(IDEV_ALLOCATED, &idev->flags); | 1312 | clear_bit(IDEV_ALLOCATED, &idev->flags); |
1314 | wake_up(&ihost->eventq); | 1313 | wake_up(&ihost->eventq); |
diff --git a/drivers/scsi/isci/remote_device.h b/drivers/scsi/isci/remote_device.h index 483ee50152f3..98c2801ed089 100644 --- a/drivers/scsi/isci/remote_device.h +++ b/drivers/scsi/isci/remote_device.h | |||
@@ -82,10 +82,9 @@ struct isci_remote_device { | |||
82 | #define IDEV_START_PENDING 0 | 82 | #define IDEV_START_PENDING 0 |
83 | #define IDEV_STOP_PENDING 1 | 83 | #define IDEV_STOP_PENDING 1 |
84 | #define IDEV_ALLOCATED 2 | 84 | #define IDEV_ALLOCATED 2 |
85 | #define IDEV_EH 3 | 85 | #define IDEV_GONE 3 |
86 | #define IDEV_GONE 4 | 86 | #define IDEV_IO_READY 4 |
87 | #define IDEV_IO_READY 5 | 87 | #define IDEV_IO_NCQERROR 5 |
88 | #define IDEV_IO_NCQERROR 6 | ||
89 | unsigned long flags; | 88 | unsigned long flags; |
90 | struct kref kref; | 89 | struct kref kref; |
91 | struct isci_port *isci_port; | 90 | struct isci_port *isci_port; |
diff --git a/drivers/scsi/isci/task.c b/drivers/scsi/isci/task.c index 530697957481..374254ede9d4 100644 --- a/drivers/scsi/isci/task.c +++ b/drivers/scsi/isci/task.c | |||
@@ -846,7 +846,6 @@ int isci_task_lu_reset(struct domain_device *dev, u8 *lun) | |||
846 | ret = TMF_RESP_FUNC_COMPLETE; | 846 | ret = TMF_RESP_FUNC_COMPLETE; |
847 | goto out; | 847 | goto out; |
848 | } | 848 | } |
849 | set_bit(IDEV_EH, &isci_device->flags); | ||
850 | 849 | ||
851 | /* Send the task management part of the reset. */ | 850 | /* Send the task management part of the reset. */ |
852 | if (dev_is_sata(dev)) { | 851 | if (dev_is_sata(dev)) { |
@@ -981,9 +980,6 @@ int isci_task_abort_task(struct sas_task *task) | |||
981 | "%s: dev = %p, task = %p, old_request == %p\n", | 980 | "%s: dev = %p, task = %p, old_request == %p\n", |
982 | __func__, isci_device, task, old_request); | 981 | __func__, isci_device, task, old_request); |
983 | 982 | ||
984 | if (isci_device) | ||
985 | set_bit(IDEV_EH, &isci_device->flags); | ||
986 | |||
987 | /* Device reset conditions signalled in task_state_flags are the | 983 | /* Device reset conditions signalled in task_state_flags are the |
988 | * responsbility of libsas to observe at the start of the error | 984 | * responsbility of libsas to observe at the start of the error |
989 | * handler thread. | 985 | * handler thread. |
@@ -1312,7 +1308,10 @@ int isci_task_I_T_nexus_reset(struct domain_device *dev) | |||
1312 | idev = isci_lookup_device(dev); | 1308 | idev = isci_lookup_device(dev); |
1313 | spin_unlock_irqrestore(&ihost->scic_lock, flags); | 1309 | spin_unlock_irqrestore(&ihost->scic_lock, flags); |
1314 | 1310 | ||
1315 | if (!idev || !test_bit(IDEV_EH, &idev->flags)) { | 1311 | if (!idev) { |
1312 | /* XXX: need to cleanup any ireqs targeting this | ||
1313 | * domain_device | ||
1314 | */ | ||
1316 | ret = TMF_RESP_FUNC_COMPLETE; | 1315 | ret = TMF_RESP_FUNC_COMPLETE; |
1317 | goto out; | 1316 | goto out; |
1318 | } | 1317 | } |