scsi_lib: correctly retry failed zero length REQ_TYPE_FS commands
[firefly-linux-kernel-4.4.55.git] / drivers / scsi / scsi_lib.c
index dd8ad2a44510cae1b97260b7d64fc65e7770db53..cf5b99e1f12b087cbed6831530175bc2c42d2928 100644 (file)
@@ -910,9 +910,12 @@ void scsi_io_completion(struct scsi_cmnd *cmd, unsigned int good_bytes)
        }
 
        /*
-        * If we finished all bytes in the request we are done now.
+        * special case: failed zero length commands always need to
+        * drop down into the retry code. Otherwise, if we finished
+        * all bytes in the request we are done now.
         */
-       if (!scsi_end_request(req, error, good_bytes, 0))
+       if (!(blk_rq_bytes(req) == 0 && error) &&
+           !scsi_end_request(req, error, good_bytes, 0))
                return;
 
        /*