[SCSI] fix recovered error handling
authorJames Bottomley <James.Bottomley@HansenPartnership.com>
Mon, 30 Mar 2009 16:55:51 +0000 (16:55 +0000)
committerJames Bottomley <James.Bottomley@HansenPartnership.com>
Fri, 3 Apr 2009 14:22:55 +0000 (09:22 -0500)
commita9bddd74630b2a1f2dedc537417c372b2d9edc76
treed086a3d0770536bc0910ea9ad9eb4a35be273848
parenta2f5bfcf711aa72ad5587b533a1909334c2533a4
[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>
drivers/scsi/scsi_lib.c
drivers/scsi/sd.c
drivers/scsi/sr.c