Hannes Reinecke abe18a
From: Rajashekhar M A <rajs@netapp.com>
Hannes Reinecke abe18a
Subject: I/O errors for ALUA state transitions
Hannes Reinecke abe18a
References: bnc#491289
Hannes Reinecke d1e442
Patch-mainline: submitted to linux-scsi, Sep 7th, 2021
Hannes Reinecke abe18a
Hannes Reinecke d1e442
When a host is configured with a few LUNs and IO is running,
Hannes Reinecke abe18a
injecting FC faults repeatedly leads to path recovery problems.
Hannes Reinecke abe18a
The LUNs have 4 paths each and 3 of them come back active after
Hannes Reinecke abe18a
say an FC fault which makes two of the paths go down, instead of
Hannes Reinecke abe18a
all 4. This happens after several iterations of continuous FC faults.
Hannes Reinecke abe18a
Hannes Reinecke abe18a
Reason here is that we're returning an I/O error whenever we're
Hannes Reinecke abe18a
encountering sense code 06/04/0a (LOGICAL UNIT NOT ACCESSIBLE,
Hannes Reinecke abe18a
ASYMMETRIC ACCESS STATE TRANSITION) instead of retrying.
Hannes Reinecke abe18a
Hannes Reinecke abe18a
Signed-off-by: Hannes Reinecke <hare@suse.de>
Hannes Reinecke abe18a
Hannes Reinecke abe18a
---
Hannes Reinecke abe18a
 drivers/scsi/scsi_error.c |    3 ++-
Hannes Reinecke abe18a
 1 file changed, 2 insertions(+), 1 deletion(-)
Hannes Reinecke abe18a
Hannes Reinecke abe18a
--- a/drivers/scsi/scsi_error.c
Hannes Reinecke abe18a
+++ b/drivers/scsi/scsi_error.c
Jeff Mahoney a40327
@@ -376,7 +376,8 @@ static int scsi_check_sense(struct scsi_
Jeff Mahoney adf9d1
 		 * if the device is in the process of becoming ready, we
Hannes Reinecke abe18a
 		 * should retry.
Hannes Reinecke abe18a
 		 */
Hannes Reinecke abe18a
-		if ((sshdr.asc == 0x04) && (sshdr.ascq == 0x01))
Hannes Reinecke abe18a
+		if ((sshdr.asc == 0x04) &&
Hannes Reinecke abe18a
+		    (sshdr.ascq == 0x01 || sshdr.ascq == 0x0a))
Hannes Reinecke abe18a
 			return NEEDS_RETRY;
Hannes Reinecke abe18a
 		/*
Hannes Reinecke abe18a
 		 * if the device is not started, we need to wake