diff options
-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 08ed506e6059..e46155b006dc 100644 --- a/drivers/scsi/scsi_error.c +++ b/drivers/scsi/scsi_error.c | |||
@@ -301,7 +301,20 @@ static int scsi_check_sense(struct scsi_cmnd *scmd) | |||
301 | if (scmd->device->allow_restart && | 301 | if (scmd->device->allow_restart && |
302 | (sshdr.asc == 0x04) && (sshdr.ascq == 0x02)) | 302 | (sshdr.asc == 0x04) && (sshdr.ascq == 0x02)) |
303 | return FAILED; | 303 | return FAILED; |
304 | return SUCCESS; | 304 | |
305 | if (blk_barrier_rq(scmd->request)) | ||
306 | /* | ||
307 | * barrier requests should always retry on UA | ||
308 | * otherwise block will get a spurious error | ||
309 | */ | ||
310 | return NEEDS_RETRY; | ||
311 | else | ||
312 | /* | ||
313 | * for normal (non barrier) commands, pass the | ||
314 | * UA upwards for a determination in the | ||
315 | * completion functions | ||
316 | */ | ||
317 | return SUCCESS; | ||
305 | 318 | ||
306 | /* these three are not supported */ | 319 | /* these three are not supported */ |
307 | case COPY_ABORTED: | 320 | case COPY_ABORTED: |