[PATCH v2 21/35] scsi: retry INQUIRY after timeout

Mike Christie
2022-09-29T02:55:42Z

Description from: Martin Wilck <mwilck@suse.com>:

The SCSI mid layer doesn't retry commands after DID_TIME_OUT (see
scsi_noretry_cmd()). Packet loss in the fabric can cause spurious timeouts
during SCSI device probing, causing device probing to fail. This has been
observed in FCoE uplink failover tests, for example.

This patch fixes the issue by retrying the INQUIRY up to 3 times (in
practice, we never observed more than a single retry),

Signed-off-by: Mike Christie <michael.christie@oracle.com>
---
drivers/scsi/scsi_scan.c | 4 ++++
1 file changed, 4 insertions(+)

diff --git a/drivers/scsi/scsi_scan.c b/drivers/scsi/scsi_scan.c
index 83f33b215e4c..4c2e8d1baf43 100644
--- a/drivers/scsi/scsi_scan.c
+++ b/drivers/scsi/scsi_scan.c
@@ -674,6 +674,10 @@ static int scsi_probe_lun(struct scsi_device *sdev, unsigned char *inq_result,
.allowed = 3,
.result = SAM_STAT_CHECK_CONDITION,
},
+ {
+ .allowed = 3,
+ .result = DID_TIME_OUT << 16,
+ },
{},
};

--
2.25.1