[SCSI] Retry commands with UNIT_ATTENTION sense codes to fix ext3/ext4 I/O error
authorJames Bottomley <James.Bottomley@suse.de>
Tue, 4 May 2010 20:51:40 +0000 (16:51 -0400)
committerJames Bottomley <James.Bottomley@suse.de>
Wed, 5 May 2010 16:15:57 +0000 (12:15 -0400)
commit77a4229719e511a0d38d9c355317ae1469adeb54
tree6547272402fca49cde94fd5cb7842eea08b45dd7
parentc213e1407be6b04b144794399a91472e0ef92aec
[SCSI] Retry commands with UNIT_ATTENTION sense codes to fix ext3/ext4 I/O error

There's nastyness in the way we currently handle barriers (and
discards): They're effectively filesystem commands, but they get
processed as BLOCK_PC commands.  Unfortunately BLOCK_PC commands are
taken by SCSI to be SG_IO commands and the issuer expects to see and
handle any returned errors, however trivial.  This leads to a huge
problem, because the block layer doesn't expect this to happen and any
trivially retryable error on a barrier causes an immediate I/O error
to the filesystem.

The only real way to hack around this is to take the usual class of
offending errors (unit attentions) and make them all retryable in the
case of a REQ_HARDBARRIER.  A correct fix would involve a rework of
the entire block and SCSI submit system, and so is out of scope for a
quick fix.

Cc: Hannes Reinecke <hare@suse.de>
Cc: Stable Tree <stable@kernel.org>
Signed-off-by: James Bottomley <James.Bottomley@suse.de>
drivers/scsi/scsi_error.c