Commit 48418bb6e33f6b7f9a306a68414c0f72a2da9181
Exists in
ti-lsk-linux-4.1.y
and in
10 other branches
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 */ |