diff options
author | Dan Williams <dan.j.williams@intel.com> | 2011-11-17 20:59:54 -0500 |
---|---|---|
committer | James Bottomley <JBottomley@Parallels.com> | 2012-02-29 13:49:36 -0500 |
commit | 36a399473902a57218dc493c5a814708a56b73ab (patch) | |
tree | e64a9f136bbacaded9fdd3d3d39c342953d9be34 /include/scsi | |
parent | 50824d6c5657ce340e3911171865a8d99fdd8eba (diff) |
[SCSI] libsas: poll for ata device readiness after reset
Use ata_wait_after_reset() to poll for link recovery after a reset.
This combined with sas_ha->eh_mutex prevents expander rediscovery from
probing phys in an intermediate state. Local discovery does not have a
mechanism to filter link status changes during this timeout, so it
remains the responsibility of lldds to prevent premature port teardown.
Although once all lldd's support ->lldd_ata_check_ready() that could be
used as a gate to local port teardown.
The signature fis is re-transmitted when the link comes back so we
should be revalidating the ata device class, but that is left to a future
patch.
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 |
1 files changed, 1 insertions, 0 deletions
diff --git a/include/scsi/libsas.h b/include/scsi/libsas.h index 18704a2e4f07..2079b18467a1 100644 --- a/include/scsi/libsas.h +++ b/include/scsi/libsas.h | |||
@@ -615,6 +615,7 @@ struct sas_domain_function_template { | |||
615 | int (*lldd_clear_task_set)(struct domain_device *, u8 *lun); | 615 | int (*lldd_clear_task_set)(struct domain_device *, u8 *lun); |
616 | int (*lldd_I_T_nexus_reset)(struct domain_device *); | 616 | int (*lldd_I_T_nexus_reset)(struct domain_device *); |
617 | int (*lldd_ata_soft_reset)(struct domain_device *); | 617 | int (*lldd_ata_soft_reset)(struct domain_device *); |
618 | int (*lldd_ata_check_ready)(struct domain_device *); | ||
618 | void (*lldd_ata_set_dmamode)(struct domain_device *); | 619 | void (*lldd_ata_set_dmamode)(struct domain_device *); |
619 | int (*lldd_lu_reset)(struct domain_device *, u8 *lun); | 620 | int (*lldd_lu_reset)(struct domain_device *, u8 *lun); |
620 | int (*lldd_query_task)(struct sas_task *); | 621 | int (*lldd_query_task)(struct sas_task *); |