summaryrefslogtreecommitdiffstats
path: root/drivers/scsi/sr.c
diff options
context:
space:
mode:
authorJames Bottomley <James.Bottomley@HansenPartnership.com>2009-03-30 16:55:51 +0000
committerJames Bottomley <James.Bottomley@HansenPartnership.com>2009-04-03 09:22:55 -0500
commita9bddd74630b2a1f2dedc537417c372b2d9edc76 (patch)
treed086a3d0770536bc0910ea9ad9eb4a35be273848 /drivers/scsi/sr.c
parenta2f5bfcf711aa72ad5587b533a1909334c2533a4 (diff)
downloadlinux-a9bddd74630b2a1f2dedc537417c372b2d9edc76.tar.gz
linux-a9bddd74630b2a1f2dedc537417c372b2d9edc76.tar.bz2
linux-a9bddd74630b2a1f2dedc537417c372b2d9edc76.zip
[SCSI] fix recovered error handling
We have a problem with recovered error handling in that any command which goes down as BLOCK_PC but which returns a sense code of RECOVERED ERROR gets completed with -EIO. For actual SG_IO commands, this doesn't matter at all, since the error return code gets dropped in favour of req->errors which contain the SCSI completion code. However, if this command is part of the block system, then it will pay attention to the returned error code. In particularly if a SYNCHRONIZE CACHE from a barrier command completes with RECOVERED ERROR, the resulting -EIO on the barrier causes block to error the request and return it to the filesystem. Fix this by converting the -EIO for recovered error to zero, plus remove the printing of this from sd and sr so the message isn't double printed. Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
Diffstat (limited to 'drivers/scsi/sr.c')
-rw-r--r--drivers/scsi/sr.c9
1 files changed, 0 insertions, 9 deletions
diff --git a/drivers/scsi/sr.c b/drivers/scsi/sr.c
index e7fa3caead79..0e1a0f2d2ad5 100644
--- a/drivers/scsi/sr.c
+++ b/drivers/scsi/sr.c
@@ -309,15 +309,6 @@ static int sr_done(struct scsi_cmnd *SCpnt)
break;
case RECOVERED_ERROR:
-
- /*
- * An error occured, but it recovered. Inform the
- * user, but make sure that it's not treated as a
- * hard error.
- */
- scsi_print_sense("sr", SCpnt);
- SCpnt->result = 0;
- SCpnt->sense_buffer[0] = 0x0;
good_bytes = this_count;
break;