Commit 48418bb6e33f6b7f9a306a68414c0f72a2da9181

Authored by Linus Torvalds

Merge tag 'scsi-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi

Pull SCSI barrier fix from James Bottomley:
 "This is a potential data corruption fix: If we get an error sending
  down a barrier, we simply ignore it meaning the barrier semantics get
  violated without anyone being any the wiser.  If the system crashes at
  this point, the filesystem potentially becomes corrupt.  Fix is to
  report errors on failed barriers"

* tag 'scsi-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi:
  scsi: handle flush errors properly

Showing 1 changed file Side-by-side Diff

drivers/scsi/scsi_lib.c
... ... @@ -733,6 +733,14 @@
733 733 scsi_next_command(cmd);
734 734 return;
735 735 }
  736 + } else if (blk_rq_bytes(req) == 0 && result && !sense_deferred) {
  737 + /*
  738 + * Certain non BLOCK_PC requests are commands that don't
  739 + * actually transfer anything (FLUSH), so cannot use
  740 + * good_bytes != blk_rq_bytes(req) as the signal for an error.
  741 + * This sets the error explicitly for the problem case.
  742 + */
  743 + error = __scsi_error_from_host_byte(cmd, result);
736 744 }
737 745  
738 746 /* no bidi support for !REQ_TYPE_BLOCK_PC yet */