On 2022/12/16 11:53, Jason Yan wrote:
Hi Xingui,
On 2022/12/16 11:29, Xingui Yang wrote:
If the ATA device fell off, call sas_ata_device_link_abort() directly and
mark all outstanding QCs as failed and kick-off EH Immediately. This
avoids
having to wait for block layer timeouts.
Why does ATA device need this special operation? SAS device does not
have to wait for block layer timeouts?
Hi Jason,
Applications that depend on I/O return may be blocked for 30 seconds,
and this can be optimized for SATA disks.
Different from SATA disks, I/Os on SAS disks can still be returned if
they are quickly plugged in after the SAS disks fall off. So I'm not
sure if this is appropriate for a sas disk.
BTW, I wish the sas disk did the same.
Thanks,
Xingui
Thanks,
Jason
Signed-off-by: Xingui Yang <yangxingui@xxxxxxxxxx>
---
drivers/scsi/libsas/sas_discover.c | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/drivers/scsi/libsas/sas_discover.c
b/drivers/scsi/libsas/sas_discover.c
index d5bc1314c341..bd22741daa99 100644
--- a/drivers/scsi/libsas/sas_discover.c
+++ b/drivers/scsi/libsas/sas_discover.c
@@ -362,6 +362,11 @@ static void sas_destruct_ports(struct
asd_sas_port *port)
void sas_unregister_dev(struct asd_sas_port *port, struct
domain_device *dev)
{
+ if (test_bit(SAS_DEV_GONE, &dev->state) &&
+ (dev->dev_type == SAS_SATA_DEV ||
+ (dev->tproto & SAS_PROTOCOL_STP)))
+ sas_ata_device_link_abort(dev, false);
+
if (!test_bit(SAS_DEV_DESTROY, &dev->state) &&
!list_empty(&dev->disco_list_node)) {
/* this rphy never saw sas_rphy_add */
.