diff options
Diffstat (limited to 'drivers/scsi')
-rw-r--r-- | drivers/scsi/constants.c | 3 | ||||
-rw-r--r-- | drivers/scsi/scsi_error.c | 15 |
2 files changed, 16 insertions, 2 deletions
diff --git a/drivers/scsi/constants.c b/drivers/scsi/constants.c index 9785d7384199..4003deefb7d8 100644 --- a/drivers/scsi/constants.c +++ b/drivers/scsi/constants.c | |||
@@ -1364,7 +1364,8 @@ EXPORT_SYMBOL(scsi_print_sense); | |||
1364 | static const char * const hostbyte_table[]={ | 1364 | static const char * const hostbyte_table[]={ |
1365 | "DID_OK", "DID_NO_CONNECT", "DID_BUS_BUSY", "DID_TIME_OUT", "DID_BAD_TARGET", | 1365 | "DID_OK", "DID_NO_CONNECT", "DID_BUS_BUSY", "DID_TIME_OUT", "DID_BAD_TARGET", |
1366 | "DID_ABORT", "DID_PARITY", "DID_ERROR", "DID_RESET", "DID_BAD_INTR", | 1366 | "DID_ABORT", "DID_PARITY", "DID_ERROR", "DID_RESET", "DID_BAD_INTR", |
1367 | "DID_PASSTHROUGH", "DID_SOFT_ERROR", "DID_IMM_RETRY", "DID_REQUEUE"}; | 1367 | "DID_PASSTHROUGH", "DID_SOFT_ERROR", "DID_IMM_RETRY", "DID_REQUEUE", |
1368 | "DID_TRANSPORT_DISRUPTED", "DID_TRANSPORT_FAILFAST" }; | ||
1368 | #define NUM_HOSTBYTE_STRS ARRAY_SIZE(hostbyte_table) | 1369 | #define NUM_HOSTBYTE_STRS ARRAY_SIZE(hostbyte_table) |
1369 | 1370 | ||
1370 | static const char * const driverbyte_table[]={ | 1371 | static const char * const driverbyte_table[]={ |
diff --git a/drivers/scsi/scsi_error.c b/drivers/scsi/scsi_error.c index fecefa05cb62..5bf8be21a165 100644 --- a/drivers/scsi/scsi_error.c +++ b/drivers/scsi/scsi_error.c | |||
@@ -1290,7 +1290,20 @@ int scsi_decide_disposition(struct scsi_cmnd *scmd) | |||
1290 | 1290 | ||
1291 | case DID_REQUEUE: | 1291 | case DID_REQUEUE: |
1292 | return ADD_TO_MLQUEUE; | 1292 | return ADD_TO_MLQUEUE; |
1293 | 1293 | case DID_TRANSPORT_DISRUPTED: | |
1294 | /* | ||
1295 | * LLD/transport was disrupted during processing of the IO. | ||
1296 | * The transport class is now blocked/blocking, | ||
1297 | * and the transport will decide what to do with the IO | ||
1298 | * based on its timers and recovery capablilities. | ||
1299 | */ | ||
1300 | return ADD_TO_MLQUEUE; | ||
1301 | case DID_TRANSPORT_FAILFAST: | ||
1302 | /* | ||
1303 | * The transport decided to failfast the IO (most likely | ||
1304 | * the fast io fail tmo fired), so send IO directly upwards. | ||
1305 | */ | ||
1306 | return SUCCESS; | ||
1294 | case DID_ERROR: | 1307 | case DID_ERROR: |
1295 | if (msg_byte(scmd->result) == COMMAND_COMPLETE && | 1308 | if (msg_byte(scmd->result) == COMMAND_COMPLETE && |
1296 | status_byte(scmd->result) == RESERVATION_CONFLICT) | 1309 | status_byte(scmd->result) == RESERVATION_CONFLICT) |