[SCSI] libsas: execute transport link resets with libata-eh via host workqueue
authorDan Williams <dan.j.williams@intel.com>
Sat, 3 Dec 2011 00:07:01 +0000 (16:07 -0800)
committerJames Bottomley <JBottomley@Parallels.com>
Sun, 19 Feb 2012 20:13:51 +0000 (14:13 -0600)
commit81c757bc696284f39f07766f0c2ca67af64ce9bd
treea01a13219199520c7a992f90d54cc83513a5cdb0
parent0b3e09da1350397f3f8b6fd839ab455b0b587451
[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>
drivers/ata/libata-eh.c
drivers/ata/libata.h
drivers/scsi/libsas/sas_ata.c
drivers/scsi/libsas/sas_expander.c
drivers/scsi/libsas/sas_init.c
drivers/scsi/libsas/sas_internal.h
include/linux/libata.h
include/scsi/sas_ata.h