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>
This commit is contained in:
@@ -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
|
||||
|
Reference in New Issue
Block a user