Commit 89fb4cd1f717a871ef79fa7debbe840e3225cd54
Committed by
Christoph Hellwig
1 parent
59ca9ee428
Exists in
ti-lsk-linux-4.1.y
and in
10 other branches
scsi: handle flush errors properly
Flush commands don't transfer data and thus need to be special cased in the I/O completion handler so that we can propagate errors to the block layer and filesystem. Signed-off-by: James Bottomley <JBottomley@Parallels.com> Reported-by: Steven Haber <steven@qumulo.com> Tested-by: Steven Haber <steven@qumulo.com> Reviewed-by: Martin K. Petersen <martin.petersen@oracle.com> Cc: stable@vger.kernel.org Signed-off-by: Christoph Hellwig <hch@lst.de>
Showing 1 changed file with 8 additions and 0 deletions 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 */ |