aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/libsas/sas_ata.c
diff options
context:
space:
mode:
authorDan Williams <dan.j.williams@intel.com>2011-12-02 19:07:01 -0500
committerJames Bottomley <JBottomley@Parallels.com>2012-02-19 15:13:51 -0500
commit81c757bc696284f39f07766f0c2ca67af64ce9bd (patch)
treea01a13219199520c7a992f90d54cc83513a5cdb0 /drivers/scsi/libsas/sas_ata.c
parent0b3e09da1350397f3f8b6fd839ab455b0b587451 (diff)
[SCSI] libsas: execute transport link resets with libata-eh via host workqueue
Link resets leave ata affiliations intact, so arrange for libsas to make an effort to avoid dropping the device due to a slow-to-recover link. Towards this end carry out reset in the host workqueue so that it can check for ata devices and kick the reset request to libata. Hard resets, in contrast, bypass libata since they are meant for associating an ata device with another initiator in the domain (tears down affiliations). Need to add a new transport_sas_phy_reset() since the current sas_phy_reset() is a utility function to libsas lldds. They are not prepared for it to loop back into eh. 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_ata.c')
-rw-r--r--drivers/scsi/libsas/sas_ata.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/drivers/scsi/libsas/sas_ata.c b/drivers/scsi/libsas/sas_ata.c
index 48cadf88c399..03930a04a679 100644
--- a/drivers/scsi/libsas/sas_ata.c
+++ b/drivers/scsi/libsas/sas_ata.c
@@ -698,3 +698,14 @@ void sas_ata_schedule_reset(struct domain_device *dev)
698 ata_port_schedule_eh(ap); 698 ata_port_schedule_eh(ap);
699 spin_unlock_irqrestore(ap->lock, flags); 699 spin_unlock_irqrestore(ap->lock, flags);
700} 700}
701
702void sas_ata_wait_eh(struct domain_device *dev)
703{
704 struct ata_port *ap;
705
706 if (!dev_is_sata(dev))
707 return;
708
709 ap = dev->sata_dev.ap;
710 ata_port_wait_eh(ap);
711}