diff options
| author | Martin K. Petersen <martin.petersen@oracle.com> | 2008-07-17 04:28:33 -0400 |
|---|---|---|
| committer | James Bottomley <James.Bottomley@HansenPartnership.com> | 2008-07-26 15:14:55 -0400 |
| commit | 511e44f42e3239a4df77b8e0e46d294d98a768ad (patch) | |
| tree | a0af26ec88cbf65b79aa23640035fbdb7fca795b /drivers/scsi/scsi_lib.c | |
| parent | 7027ad72a689797475973c6feb5f0b673382f779 (diff) | |
[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>
Diffstat (limited to 'drivers/scsi/scsi_lib.c')
| -rw-r--r-- | drivers/scsi/scsi_lib.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c index a47c05d7829..a20730c4802 100644 --- a/drivers/scsi/scsi_lib.c +++ b/drivers/scsi/scsi_lib.c | |||
| @@ -950,9 +950,14 @@ void scsi_io_completion(struct scsi_cmnd *cmd, unsigned int good_bytes) | |||
| 950 | * 6-byte command. | 950 | * 6-byte command. |
| 951 | */ | 951 | */ |
| 952 | scsi_requeue_command(q, cmd); | 952 | scsi_requeue_command(q, cmd); |
| 953 | return; | 953 | } else if (sshdr.asc == 0x10) /* DIX */ |
| 954 | } else { | 954 | scsi_end_request(cmd, -EIO, this_count, 0); |
| 955 | else | ||
| 955 | scsi_end_request(cmd, -EIO, this_count, 1); | 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 | return; | 961 | return; |
| 957 | } | 962 | } |
| 958 | break; | 963 | break; |
