diff options
Diffstat (limited to 'drivers/scsi/scsi_error.c')
-rw-r--r-- | drivers/scsi/scsi_error.c | 15 |
1 files changed, 14 insertions, 1 deletions
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) |