[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: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>

authored by

Martin K. Petersen and committed by
James Bottomley
511e44f4 7027ad72

+10 -2
+3
drivers/scsi/scsi_error.c
··· 344 344 return /* soft_error */ SUCCESS; 345 345 346 346 case ABORTED_COMMAND: 347 + if (sshdr.asc == 0x10) /* DIF */ 348 + return SUCCESS; 349 + 347 350 return NEEDS_RETRY; 348 351 case NOT_READY: 349 352 case UNIT_ATTENTION:
+7 -2
drivers/scsi/scsi_lib.c
··· 950 950 * 6-byte command. 951 951 */ 952 952 scsi_requeue_command(q, cmd); 953 - return; 954 - } else { 953 + } else if (sshdr.asc == 0x10) /* DIX */ 954 + scsi_end_request(cmd, -EIO, this_count, 0); 955 + else 955 956 scsi_end_request(cmd, -EIO, this_count, 1); 957 + return; 958 + case ABORTED_COMMAND: 959 + if (sshdr.asc == 0x10) { /* DIF */ 960 + scsi_end_request(cmd, -EIO, this_count, 0); 956 961 return; 957 962 } 958 963 break;