[SCSI] scsi_error: TASK ABORTED status handling improvement
authorVladislav Bolkhovitin <vst@vlnb.net>
Thu, 6 Nov 2008 10:57:52 +0000 (13:57 +0300)
committerJames Bottomley <James.Bottomley@HansenPartnership.com>
Mon, 29 Dec 2008 17:24:15 +0000 (11:24 -0600)
commita9b589d90e3d7748dae459031c2d912cd9e83c88
treec350db70abf9ea68664edce12fdb9a3629aae2c4
parentc85f8cb9254e60cd25a094329c9dc9185c2140e7
[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: Vladislav Bolkhovitin <vst@vlnb.net>
Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
drivers/scsi/scsi_error.c