From 4a8ab87baf8d424de99234fdfae35db6a414ffd2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ilpo=20J=C3=A4rvinen?= Date: Thu, 30 Oct 2008 13:00:57 +0200 Subject: [SCSI] scsi_error: fix indentation and braces disagreement - add braces MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ...and the list of recent breakage goes on and on, this time it's 242f9dcb8ba6f (block: unify request timeout handling) which broke it. Signed-off-by: Ilpo Järvinen Acked-by: Jens Axboe Signed-off-by: James Bottomley --- drivers/scsi/scsi_error.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'drivers/scsi/scsi_error.c') diff --git a/drivers/scsi/scsi_error.c b/drivers/scsi/scsi_error.c index edfaf241c5b..f5767dc48d6 100644 --- a/drivers/scsi/scsi_error.c +++ b/drivers/scsi/scsi_error.c @@ -136,7 +136,7 @@ enum blk_eh_timer_return scsi_times_out(struct request *req) else eh_timed_out = NULL; - if (eh_timed_out) + if (eh_timed_out) { rtn = eh_timed_out(scmd); switch (rtn) { case BLK_EH_NOT_HANDLED: @@ -144,6 +144,7 @@ enum blk_eh_timer_return scsi_times_out(struct request *req) default: return rtn; } + } if (unlikely(!scsi_eh_scmd_add(scmd, SCSI_EH_CANCEL_CMD))) { scmd->result |= DID_TIME_OUT << 16; -- cgit v1.2.3 From a9b589d90e3d7748dae459031c2d912cd9e83c88 Mon Sep 17 00:00:00 2001 From: Vladislav Bolkhovitin Date: Thu, 6 Nov 2008 13:57:52 +0300 Subject: [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 Signed-off-by: James Bottomley --- drivers/scsi/scsi_error.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'drivers/scsi/scsi_error.c') diff --git a/drivers/scsi/scsi_error.c b/drivers/scsi/scsi_error.c index f5767dc48d6..381838ebd46 100644 --- a/drivers/scsi/scsi_error.c +++ b/drivers/scsi/scsi_error.c @@ -1406,8 +1406,9 @@ int scsi_decide_disposition(struct scsi_cmnd *scmd) return ADD_TO_MLQUEUE; case GOOD: case COMMAND_TERMINATED: - case TASK_ABORTED: return SUCCESS; + case TASK_ABORTED: + goto maybe_retry; case CHECK_CONDITION: rtn = scsi_check_sense(scmd); if (rtn == NEEDS_RETRY) -- cgit v1.2.3