diff --git a/drivers/scsi/scsi_error.c b/drivers/scsi/scsi_error.c index c8fc8487e910..e45f8652867c 100644 --- a/drivers/scsi/scsi_error.c +++ b/drivers/scsi/scsi_error.c @@ -672,11 +672,11 @@ enum scsi_disposition scsi_check_sense(struct scsi_cmnd *scmd) case ILLEGAL_REQUEST: /* - * Unaligned write command. Retry immediately to handle - * out-of-order zoned writes. + * Unaligned write command. This indicates that zoned writes got + * reordered. Retry after all pending commands have completed. */ if (sshdr.asc == 0x21 && sshdr.ascq == 0x04) - return NEEDS_RETRY; + return NEEDS_DELAYED_RETRY; if (sshdr.asc == 0x20 || /* Invalid command operation code */ sshdr.asc == 0x21 || /* Logical block address out of range */ sshdr.asc == 0x22 || /* Invalid function */ diff --git a/include/scsi/scsi.h b/include/scsi/scsi.h index 3e46859774c8..dc67020aa557 100644 --- a/include/scsi/scsi.h +++ b/include/scsi/scsi.h @@ -93,6 +93,7 @@ static inline int scsi_status_is_check_condition(int status) * Internal return values. */ enum scsi_disposition { + NEEDS_DELAYED_RETRY = 0x2000, NEEDS_RETRY = 0x2001, SUCCESS = 0x2002, FAILED = 0x2003,