diff options
author | Dan Williams <dan.j.williams@intel.com> | 2011-11-17 17:59:54 -0800 |
---|---|---|
committer | James Bottomley <JBottomley@Parallels.com> | 2012-02-29 12:49:36 -0600 |
commit | 36a399473902a57218dc493c5a814708a56b73ab (patch) | |
tree | e64a9f136bbacaded9fdd3d3d39c342953d9be34 /drivers/scsi/libsas/sas_internal.h | |
parent | 50824d6c5657ce340e3911171865a8d99fdd8eba (diff) | |
download | linux-36a399473902a57218dc493c5a814708a56b73ab.tar.gz linux-36a399473902a57218dc493c5a814708a56b73ab.tar.bz2 linux-36a399473902a57218dc493c5a814708a56b73ab.zip |
[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 'drivers/scsi/libsas/sas_internal.h')
-rw-r--r-- | drivers/scsi/libsas/sas_internal.h | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/drivers/scsi/libsas/sas_internal.h b/drivers/scsi/libsas/sas_internal.h index 9e960b2d535a..a9a3bb94c1bc 100644 --- a/drivers/scsi/libsas/sas_internal.h +++ b/drivers/scsi/libsas/sas_internal.h @@ -89,7 +89,8 @@ int sas_smp_get_phy_events(struct sas_phy *phy); struct domain_device *sas_find_dev_by_rphy(struct sas_rphy *rphy); struct domain_device *sas_ex_to_ata(struct domain_device *ex_dev, int phy_id); - +int sas_get_phy_attached_sas_addr(struct domain_device *dev, int phy_id, + u8 *attached_sas_addr); void sas_hae_reset(struct work_struct *work); void sas_free_device(struct kref *kref); |