• James Bottomley's avatar
    [SCSI] fix barrier failure issue · fa8e36c3
    James Bottomley authored
    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: default avatarJens Axboe <jens.axboe@oracle.com>
    Cc: Marcelo Tosatti <mtosatti@redhat.com>
    Signed-off-by: default avatarJames Bottomley <James.Bottomley@HansenPartnership.com>
    fa8e36c3
scsi_lib.c 62.6 KB