Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d6b0c537 authored by James Bottomley's avatar James Bottomley Committed by James Bottomley
Browse files

[SCSI] fix error handling in scsi_io_completion



There was a logic fault in scsi_io_completion() where zero transfer
commands that complete successfully were sent to the block layer as
not up to date.  This patch removes the if (good_bytes > 0) gate
around the successful completion, since zero transfer commands do have
good_bytes == 0.

Signed-off-by: default avatarJames Bottomley <James.Bottomley@SteelEye.com>
parent f58f8313
Loading
Loading
Loading
Loading
+14 −16
Original line number Diff line number Diff line
@@ -920,7 +920,6 @@ void scsi_io_completion(struct scsi_cmnd *cmd, unsigned int good_bytes)
	 * Next deal with any sectors which we were able to correctly
	 * handle.
	 */
	if (good_bytes > 0) {
	SCSI_LOG_HLCOMPLETE(1, printk("%ld sectors total, "
				      "%d bytes done.\n",
				      req->nr_sectors, good_bytes));
@@ -930,12 +929,11 @@ void scsi_io_completion(struct scsi_cmnd *cmd, unsigned int good_bytes)
		req->errors = 0;

	/* A number of bytes were successfully read.  If there
		 * is leftovers and there is some kind of error
	 * are leftovers and there is some kind of error
	 * (result != 0), retry the rest.
	 */
		if (scsi_end_request(cmd, 1, good_bytes, !!result) == NULL)
	if (scsi_end_request(cmd, 1, good_bytes, result == 0) == NULL)
		return;
	}

	/* good_bytes = 0, or (inclusive) there were leftovers and
	 * result = 0, so scsi_end_request couldn't retry.