Commit a9b589d9 authored by Vladislav Bolkhovitin's avatar Vladislav Bolkhovitin Committed by James Bottomley

[SCSI] scsi_error: TASK ABORTED status handling improvement

This patch improves handling of TASK ABORTED status by Linux SCSI
mid-layer. Currently, command returned with this status considered
failed and returned to upper layers. It leads to additional error
recovery load on file systems and block layer, which sometimes can
cause undesired side effects, like I/O errors and file systems
corruptions. See http://lkml.org/lkml/2008/11/1/38, for instance.

From other side, TASK ABORTED status is returned by SCSI target if the
corresponding command was aborted by another initiator and the target
has TAS bit set in the control mode page. So, in the majority of cases
commands with TASK ABORTED status should be simply retried. In other
cases, maybe_retry path will not retry if no retries are allowed.

This patch implement suggestion by James Bottomley from
http://marc.info/?l=linux-scsi&m=121932916906009&w=2.
Signed-off-by: default avatarVladislav Bolkhovitin <vst@vlnb.net>
Signed-off-by: default avatarJames Bottomley <James.Bottomley@HansenPartnership.com>
parent c85f8cb9
...@@ -1406,8 +1406,9 @@ int scsi_decide_disposition(struct scsi_cmnd *scmd) ...@@ -1406,8 +1406,9 @@ int scsi_decide_disposition(struct scsi_cmnd *scmd)
return ADD_TO_MLQUEUE; return ADD_TO_MLQUEUE;
case GOOD: case GOOD:
case COMMAND_TERMINATED: case COMMAND_TERMINATED:
case TASK_ABORTED:
return SUCCESS; return SUCCESS;
case TASK_ABORTED:
goto maybe_retry;
case CHECK_CONDITION: case CHECK_CONDITION:
rtn = scsi_check_sense(scmd); rtn = scsi_check_sense(scmd);
if (rtn == NEEDS_RETRY) if (rtn == NEEDS_RETRY)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment