scsi: core: Return BLK_STS_AGAIN for ALUA transitioning
authorHannes Reinecke <hare@suse.de>
Wed, 30 Sep 2020 08:02:56 +0000 (10:02 +0200)
committerMartin K. Petersen <martin.petersen@oracle.com>
Wed, 11 Nov 2020 03:58:12 +0000 (22:58 -0500)
Whenever we encounter a sense code of ALUA transitioning in
scsi_io_completion() it means that the SCSI midlayer ran out of retries
trying to wait for ALUA transitioning.  In these cases we should be passing
up the error, but signalling that the I/O might be retried, preferably on
another path.  So return BLK_STS_AGAIN in these cases.

[mkp: typo + fallthrough]

Link: https://lore.kernel.org/r/20200930080256.90964-5-hare@suse.de
Reviewed-by: Ewan D. Milne <emilne@redhat.com>
Signed-off-by: Hannes Reinecke <hare@suse.de>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/scsi_lib.c

index 7691196f288cdd088043b6c45b98da6afb8802e9..855e48c7514f462169c164b41b0660034e7516fe 100644 (file)
@@ -766,6 +766,9 @@ static void scsi_io_completion_action(struct scsi_cmnd *cmd, int result)
                                case 0x24: /* depopulation in progress */
                                        action = ACTION_DELAYED_RETRY;
                                        break;
+                               case 0x0a: /* ALUA state transition */
+                                       blk_stat = BLK_STS_AGAIN;
+                                       fallthrough;
                                default:
                                        action = ACTION_FAIL;
                                        break;