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

Commit 511e44f4 authored by Martin K. Petersen's avatar Martin K. Petersen Committed by James Bottomley
Browse files

[SCSI] Do not retry a request whose data integrity check failed



If initiator or target reject the I/O due to DIF errors there is no
point in retrying.

Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: default avatarJames Bottomley <James.Bottomley@HansenPartnership.com>
parent 7027ad72
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -344,6 +344,9 @@ static int scsi_check_sense(struct scsi_cmnd *scmd)
		return /* soft_error */ SUCCESS;

	case ABORTED_COMMAND:
		if (sshdr.asc == 0x10) /* DIF */
			return SUCCESS;

		return NEEDS_RETRY;
	case NOT_READY:
	case UNIT_ATTENTION:
+7 −2
Original line number Diff line number Diff line
@@ -950,10 +950,15 @@ void scsi_io_completion(struct scsi_cmnd *cmd, unsigned int good_bytes)
				 * 6-byte command.
				 */
				scsi_requeue_command(q, cmd);
				return;
			} else {
			} else if (sshdr.asc == 0x10) /* DIX */
				scsi_end_request(cmd, -EIO, this_count, 0);
			else
				scsi_end_request(cmd, -EIO, this_count, 1);
			return;
		case ABORTED_COMMAND:
			if (sshdr.asc == 0x10) { /* DIF */
				scsi_end_request(cmd, -EIO, this_count, 0);
				return;
			}
			break;
		case NOT_READY: