diff options
author | Dan Williams <dan.j.williams@intel.com> | 2012-01-18 23:47:01 -0500 |
---|---|---|
committer | James Bottomley <JBottomley@Parallels.com> | 2012-02-29 16:35:41 -0500 |
commit | 9508a66f898d46e726a318469312b45e0b1d078b (patch) | |
tree | e6b61e6c2a7dc8b40fdc0fe34901ff3db4af47a9 /include/scsi | |
parent | 92625f9bff3853951cc75f5bc084ee67c1317d2f (diff) |
[SCSI] libsas: async ata scanning
libsas ata error handling is already async but this does not help the
scan case. Move initial link recovery out from under host->scan_mutex,
and delay synchronization with eh until after all port probe/recovery
work has been queued.
Device ordering is maintained with scan order by still calling
sas_rphy_add() in order of domain discovery.
Since we now scan the domain list when invoking libata-eh we need to be
careful to check for fully initialized ata ports.
Acked-by: Jack Wang <jack_wang@usish.com>
Acked-by: Jeff Garzik <jgarzik@redhat.com>
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Diffstat (limited to 'include/scsi')
-rw-r--r-- | include/scsi/libsas.h | 1 | ||||
-rw-r--r-- | include/scsi/sas_ata.h | 12 |
2 files changed, 7 insertions, 6 deletions
diff --git a/include/scsi/libsas.h b/include/scsi/libsas.h index 4a42be34fad0..20153d58e4e6 100644 --- a/include/scsi/libsas.h +++ b/include/scsi/libsas.h | |||
@@ -646,7 +646,6 @@ int sas_phy_reset(struct sas_phy *phy, int hard_reset); | |||
646 | int sas_queue_up(struct sas_task *task); | 646 | int sas_queue_up(struct sas_task *task); |
647 | extern int sas_queuecommand(struct Scsi_Host * ,struct scsi_cmnd *); | 647 | extern int sas_queuecommand(struct Scsi_Host * ,struct scsi_cmnd *); |
648 | extern int sas_target_alloc(struct scsi_target *); | 648 | extern int sas_target_alloc(struct scsi_target *); |
649 | extern int sas_slave_alloc(struct scsi_device *); | ||
650 | extern int sas_slave_configure(struct scsi_device *); | 649 | extern int sas_slave_configure(struct scsi_device *); |
651 | extern int sas_change_queue_depth(struct scsi_device *, int new_depth, | 650 | extern int sas_change_queue_depth(struct scsi_device *, int new_depth, |
652 | int reason); | 651 | int reason); |
diff --git a/include/scsi/sas_ata.h b/include/scsi/sas_ata.h index 1556eff4cc44..cdccd2eb7b6c 100644 --- a/include/scsi/sas_ata.h +++ b/include/scsi/sas_ata.h | |||
@@ -37,15 +37,14 @@ static inline int dev_is_sata(struct domain_device *dev) | |||
37 | } | 37 | } |
38 | 38 | ||
39 | int sas_get_ata_info(struct domain_device *dev, struct ex_phy *phy); | 39 | int sas_get_ata_info(struct domain_device *dev, struct ex_phy *phy); |
40 | int sas_ata_init_host_and_port(struct domain_device *found_dev, | 40 | int sas_ata_init_host_and_port(struct domain_device *found_dev); |
41 | struct scsi_target *starget); | ||
42 | |||
43 | void sas_ata_task_abort(struct sas_task *task); | 41 | void sas_ata_task_abort(struct sas_task *task); |
44 | void sas_ata_strategy_handler(struct Scsi_Host *shost); | 42 | void sas_ata_strategy_handler(struct Scsi_Host *shost); |
45 | void sas_ata_eh(struct Scsi_Host *shost, struct list_head *work_q, | 43 | void sas_ata_eh(struct Scsi_Host *shost, struct list_head *work_q, |
46 | struct list_head *done_q); | 44 | struct list_head *done_q); |
47 | void sas_ata_schedule_reset(struct domain_device *dev); | 45 | void sas_ata_schedule_reset(struct domain_device *dev); |
48 | void sas_ata_wait_eh(struct domain_device *dev); | 46 | void sas_ata_wait_eh(struct domain_device *dev); |
47 | void sas_probe_sata(struct asd_sas_port *port); | ||
49 | #else | 48 | #else |
50 | 49 | ||
51 | 50 | ||
@@ -53,8 +52,7 @@ static inline int dev_is_sata(struct domain_device *dev) | |||
53 | { | 52 | { |
54 | return 0; | 53 | return 0; |
55 | } | 54 | } |
56 | static inline int sas_ata_init_host_and_port(struct domain_device *found_dev, | 55 | static inline int sas_ata_init_host_and_port(struct domain_device *found_dev) |
57 | struct scsi_target *starget) | ||
58 | { | 56 | { |
59 | return 0; | 57 | return 0; |
60 | } | 58 | } |
@@ -79,6 +77,10 @@ static inline void sas_ata_wait_eh(struct domain_device *dev) | |||
79 | { | 77 | { |
80 | } | 78 | } |
81 | 79 | ||
80 | static inline void sas_probe_sata(struct asd_sas_port *port) | ||
81 | { | ||
82 | } | ||
83 | |||
82 | static inline int sas_get_ata_info(struct domain_device *dev, struct ex_phy *phy) | 84 | static inline int sas_get_ata_info(struct domain_device *dev, struct ex_phy *phy) |
83 | { | 85 | { |
84 | return 0; | 86 | return 0; |