diff options
author | Dan Williams <dan.j.williams@intel.com> | 2011-06-16 11:26:12 -0700 |
---|---|---|
committer | Dan Williams <dan.j.williams@intel.com> | 2011-07-03 04:04:51 -0700 |
commit | f2088267514b39af1a94409168101527769a911c (patch) | |
tree | 9155ce7eb3edf40ecdabc690bff34622ecea1294 /drivers/scsi/isci/remote_device.h | |
parent | 209fae14fabfd48525e5630bebbbd4ca15090c60 (diff) |
isci: kill isci_remote_device_change_state()
Now that "stopping/stopped" are one in the same and signalled by a NULL device
pointer the rest of the device status infrastructure can be removed (->status
and ->state_lock). The "not ready for i/o state" is replaced with a state
flag, and is evaluated under scic_lock so that we don't see transients from
taking the device reference to submitting the i/o.
This also fixes a potential leakage of can_queue slots in the rare case that
SAS_TASK_ABORTED is set at submission.
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
Diffstat (limited to 'drivers/scsi/isci/remote_device.h')
-rw-r--r-- | drivers/scsi/isci/remote_device.h | 5 |
1 files changed, 1 insertions, 4 deletions
diff --git a/drivers/scsi/isci/remote_device.h b/drivers/scsi/isci/remote_device.h index 05842b5f1e3..33f01144731 100644 --- a/drivers/scsi/isci/remote_device.h +++ b/drivers/scsi/isci/remote_device.h @@ -130,19 +130,18 @@ struct scic_sds_remote_device { }; struct isci_remote_device { - enum isci_status status; #define IDEV_START_PENDING 0 #define IDEV_STOP_PENDING 1 #define IDEV_ALLOCATED 2 #define IDEV_EH 3 #define IDEV_GONE 4 + #define IDEV_IO_READY 5 unsigned long flags; struct kref kref; struct isci_port *isci_port; struct domain_device *domain_dev; struct list_head node; struct list_head reqs_in_process; - spinlock_t state_lock; struct scic_sds_remote_device sci; }; @@ -178,8 +177,6 @@ bool isci_device_is_reset_pending(struct isci_host *ihost, struct isci_remote_device *idev); void isci_device_clear_reset_pending(struct isci_host *ihost, struct isci_remote_device *idev); -void isci_remote_device_change_state(struct isci_remote_device *idev, - enum isci_status status); /** * scic_remote_device_stop() - This method will stop both transmission and * reception of link activity for the supplied remote device. This method |