[SCSI] fix barrier failure issue
authorJames Bottomley <James.Bottomley@HansenPartnership.com>
Wed, 2 Apr 2008 23:11:52 +0000 (18:11 -0500)
committerJames Bottomley <James.Bottomley@HansenPartnership.com>
Mon, 7 Apr 2008 17:19:10 +0000 (12:19 -0500)
commitfa8e36c39b00a219d2c37250e493c3421e0e67e9
tree81fae0291d92b703fa281dba31011b9e9c467f9a
parentbfab1637b5d0c9683016917fa8e082ba6ce8d5a6
[SCSI] fix barrier failure issue

Currently, if the barrier command fails, the error return isn't seen
by the block layer and it proceeds on regardless.  The problem is that
SCSI always returns no error for REQ_TYPE_BLOCK_PC ... it expects the
submitter to pick the errors out of req->errors, which the block
barrier functions don't do.

Since it appears that the way SG_IO and scsi_execute_request() work
they discard the block error return and always use req->errors, the
best fix for this is to have the SCSI layer return an error to block
if one actually occurred (this also allows us to filter out spurious
errors, like deferred sense).

This patch is a bug fix that will need backporting to stable, but it's
also quite a big change and in need of testing, so we'll incubate in
the main kernel tree and backport at the -rc2 or so stage if no
problems turn up.

Acked-by: Jens Axboe <jens.axboe@oracle.com>
Cc: Marcelo Tosatti <mtosatti@redhat.com>
Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
drivers/scsi/scsi_lib.c