* [PATCH 0/2] scsi: sense retry
@ 2008-08-12 19:11 Mike Anderson
2008-08-12 19:11 ` [PATCH 1/2] scsi: scsi_dh check_sense return ADD_TO_MLQUEUE Mike Anderson
2008-08-12 19:11 ` [PATCH 2/2] scsi: scsi_check_sense HARDWARE_ERROR " Mike Anderson
0 siblings, 2 replies; 6+ messages in thread
From: Mike Anderson @ 2008-08-12 19:11 UTC (permalink / raw)
To: linux-scsi; +Cc: Chandra Seetharaman, Hannes Reinecke
This patch series effects the retry behavior of IO when blk_noretry_request is used.
The patches effect the retries in two areas. The first is that it allows
the scsi_dh check_sense routines to have more control of the retry of a
IO. Currently if the scsi_dh check_sense functions return NEEDS_RETRY
this will not lead to a retry in the DM-MP configurations where they are
most likely to be used because the blk_noretry_request will be true for
these IOs which will prevent the retry. The second change in behavior of
the HARDWARE_ERROR sense key is to avoid path failures of all DM-MP paths
for the IBM device(s) returning this sense key. The utilization of
ADD_TO_MLQUEUE for the HARDWARE_ERROR sense key could lead to longer retry
times for the other user of BLIST_RETRY_HWERROR.
I have tried to summarize the scsi_decide_disposition current retry behavior
below.
1.) Based on host_byte
The host bytes listed below will return ADD_TO_MLQUEUE or NEEDS_RETRY
which is always retried up to the max scsi mid-layer in-flight time
(unsigned long wait_for = (cmd->allowed + 1) * cmd->timeout_per_command;).
DID_REQUEUE:
(returns ADD_TO_MLQUEUE)
DID_IMM_RETRY:
(returns NEEDS_RETRY)
The host bytes listed below will use the maybe_retry goto which will
not be retried if blk_noretry_request is true.
DID_ERROR:
DID_SOFT_ERROR:
DID_BUS_BUSY:
DID_PARITY:
2.) Based on status_byte
The status bytes listed below will return ADD_TO_MLQUEUE which is
always retried up to the max scsi mid-layer in-flight time (unsigned
long wait_for = (cmd->allowed + 1) * cmd->timeout_per_command;).
BUSY:
QUEUE_FULL:
3.) Based on sense_key
The sense keys and sense checks listed below will return NEEDS_RETRY
which will be not be retried if blk_noretry_request is true.
Note1: There is some if checks removed to simplify the list. Please see
code for more detailed behavior.
Note2: All scsi_dh sense_check functions will be effected by the
blk_noretry_request check.
scsi_sense_is_deferred
ABORTED_COMMAND:
NOT_READY:
UNIT_ATTENTION:
MEDIUM_ERROR:
HARDWARE_ERROR:
I have summarized the change in retry behavior below.
1.) Based on sense_key
The current scsi_dh sense_check functions will return
ADD_TO_MLQUEUE.
HARDWARE_ERROR will return ADD_TO_MLQUEUE if retry_hwerror is set.
-andmike
--
Michael Anderson
andmike@linux.vnet.ibm.com
^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH 1/2] scsi: scsi_dh check_sense return ADD_TO_MLQUEUE
2008-08-12 19:11 [PATCH 0/2] scsi: sense retry Mike Anderson
@ 2008-08-12 19:11 ` Mike Anderson
2008-08-25 12:33 ` Hannes Reinecke
2008-08-12 19:11 ` [PATCH 2/2] scsi: scsi_check_sense HARDWARE_ERROR " Mike Anderson
1 sibling, 1 reply; 6+ messages in thread
From: Mike Anderson @ 2008-08-12 19:11 UTC (permalink / raw)
To: linux-scsi; +Cc: Chandra Seetharaman, Hannes Reinecke
Change scsi_dh check_sense functions to return ADD_TO_MLQUEUE
to allow retries to occur without restriction of blk_noretry_request
check.
Signed-off-by: Mike Anderson <andmike@linux.vnet.ibm.com>
---
drivers/scsi/device_handler/scsi_dh_alua.c | 12 ++++++------
drivers/scsi/device_handler/scsi_dh_emc.c | 4 ++--
drivers/scsi/device_handler/scsi_dh_rdac.c | 4 ++--
3 files changed, 10 insertions(+), 10 deletions(-)
diff --git a/drivers/scsi/device_handler/scsi_dh_alua.c b/drivers/scsi/device_handler/scsi_dh_alua.c
index fcdd73f..2eb9edd 100644
--- a/drivers/scsi/device_handler/scsi_dh_alua.c
+++ b/drivers/scsi/device_handler/scsi_dh_alua.c
@@ -425,7 +425,7 @@ static int alua_check_sense(struct scsi_device *sdev,
/*
* LUN Not Accessible - ALUA state transition
*/
- return NEEDS_RETRY;
+ return ADD_TO_MLQUEUE;
if (sense_hdr->asc == 0x04 && sense_hdr->ascq == 0x0b)
/*
* LUN Not Accessible -- Target port in standby state
@@ -447,18 +447,18 @@ static int alua_check_sense(struct scsi_device *sdev,
/*
* Power On, Reset, or Bus Device Reset, just retry.
*/
- return NEEDS_RETRY;
+ return ADD_TO_MLQUEUE;
if (sense_hdr->asc == 0x2a && sense_hdr->ascq == 0x06) {
/*
* ALUA state changed
*/
- return NEEDS_RETRY;
+ return ADD_TO_MLQUEUE;
}
if (sense_hdr->asc == 0x2a && sense_hdr->ascq == 0x07) {
/*
* Implicit ALUA state transition failed
*/
- return NEEDS_RETRY;
+ return ADD_TO_MLQUEUE;
}
break;
}
@@ -490,7 +490,7 @@ static int alua_stpg(struct scsi_device *sdev, int state,
if (!err)
return SCSI_DH_IO;
err = alua_check_sense(sdev, &sense_hdr);
- if (retry > 0 && err == NEEDS_RETRY) {
+ if (retry > 0 && err == ADD_TO_MLQUEUE) {
retry--;
goto retry;
}
@@ -535,7 +535,7 @@ static int alua_rtpg(struct scsi_device *sdev, struct alua_dh_data *h)
return SCSI_DH_IO;
err = alua_check_sense(sdev, &sense_hdr);
- if (err == NEEDS_RETRY)
+ if (err == ADD_TO_MLQUEUE)
goto retry;
sdev_printk(KERN_INFO, sdev,
"%s: rtpg sense code %02x/%02x/%02x\n",
diff --git a/drivers/scsi/device_handler/scsi_dh_emc.c b/drivers/scsi/device_handler/scsi_dh_emc.c
index aa46b13..7796d65 100644
--- a/drivers/scsi/device_handler/scsi_dh_emc.c
+++ b/drivers/scsi/device_handler/scsi_dh_emc.c
@@ -439,7 +439,7 @@ static int clariion_check_sense(struct scsi_device *sdev,
* Unit Attention Code. This is the first IO
* to the new path, so just retry.
*/
- return NEEDS_RETRY;
+ return ADD_TO_MLQUEUE;
break;
}
@@ -514,7 +514,7 @@ retry:
return SCSI_DH_IO;
err = clariion_check_sense(sdev, &sshdr);
- if (retry > 0 && err == NEEDS_RETRY) {
+ if (retry > 0 && err == ADD_TO_MLQUEUE) {
retry--;
goto retry;
}
diff --git a/drivers/scsi/device_handler/scsi_dh_rdac.c b/drivers/scsi/device_handler/scsi_dh_rdac.c
index b093a50..f5ff950 100644
--- a/drivers/scsi/device_handler/scsi_dh_rdac.c
+++ b/drivers/scsi/device_handler/scsi_dh_rdac.c
@@ -550,7 +550,7 @@ static int rdac_check_sense(struct scsi_device *sdev,
*
* Just retry and wait.
*/
- return NEEDS_RETRY;
+ return ADD_TO_MLQUEUE;
break;
case ILLEGAL_REQUEST:
if (sense_hdr->asc == 0x94 && sense_hdr->ascq == 0x01) {
@@ -567,7 +567,7 @@ static int rdac_check_sense(struct scsi_device *sdev,
/*
* Power On, Reset, or Bus Device Reset, just retry.
*/
- return NEEDS_RETRY;
+ return ADD_TO_MLQUEUE;
break;
}
/* success just means we do not care what scsi-ml does */
--
1.5.5.1
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH 2/2] scsi: scsi_check_sense HARDWARE_ERROR return ADD_TO_MLQUEUE
2008-08-12 19:11 [PATCH 0/2] scsi: sense retry Mike Anderson
2008-08-12 19:11 ` [PATCH 1/2] scsi: scsi_dh check_sense return ADD_TO_MLQUEUE Mike Anderson
@ 2008-08-12 19:11 ` Mike Anderson
2008-08-25 12:34 ` Hannes Reinecke
1 sibling, 1 reply; 6+ messages in thread
From: Mike Anderson @ 2008-08-12 19:11 UTC (permalink / raw)
To: linux-scsi; +Cc: Chandra Seetharaman, Hannes Reinecke
Change scsi_check_sense HARDWARE_ERROR check to return ADD_TO_MLQUEUE
to allow retries to occur without restriction of blk_noretry_request
check.
Signed-off-by: Mike Anderson <andmike@linux.vnet.ibm.com>
---
drivers/scsi/scsi_error.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/drivers/scsi/scsi_error.c b/drivers/scsi/scsi_error.c
index 880051c..39ce3ab 100644
--- a/drivers/scsi/scsi_error.c
+++ b/drivers/scsi/scsi_error.c
@@ -391,7 +391,7 @@ static int scsi_check_sense(struct scsi_cmnd *scmd)
case HARDWARE_ERROR:
if (scmd->device->retry_hwerror)
- return NEEDS_RETRY;
+ return ADD_TO_MLQUEUE;
else
return SUCCESS;
--
1.5.5.1
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH 1/2] scsi: scsi_dh check_sense return ADD_TO_MLQUEUE
2008-08-12 19:11 ` [PATCH 1/2] scsi: scsi_dh check_sense return ADD_TO_MLQUEUE Mike Anderson
@ 2008-08-25 12:33 ` Hannes Reinecke
2008-08-25 20:02 ` Chandra Seetharaman
0 siblings, 1 reply; 6+ messages in thread
From: Hannes Reinecke @ 2008-08-25 12:33 UTC (permalink / raw)
To: Mike Anderson; +Cc: linux-scsi, Chandra Seetharaman
Hi Mike,
Mike Anderson wrote:
> Change scsi_dh check_sense functions to return ADD_TO_MLQUEUE
> to allow retries to occur without restriction of blk_noretry_request
> check.
>
Correct. Error on my side.
> Signed-off-by: Mike Anderson <andmike@linux.vnet.ibm.com>
Signed-off-by: Hannes Reinecke <hare@suse.de>
--
Dr. Hannes Reinecke zSeries & Storage
hare@suse.de +49 911 74053 688
SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg
GF: Markus Rex, HRB 16746 (AG Nürnberg)
--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH 2/2] scsi: scsi_check_sense HARDWARE_ERROR return ADD_TO_MLQUEUE
2008-08-12 19:11 ` [PATCH 2/2] scsi: scsi_check_sense HARDWARE_ERROR " Mike Anderson
@ 2008-08-25 12:34 ` Hannes Reinecke
0 siblings, 0 replies; 6+ messages in thread
From: Hannes Reinecke @ 2008-08-25 12:34 UTC (permalink / raw)
To: Mike Anderson; +Cc: linux-scsi, Chandra Seetharaman
Hi Mike,
Mike Anderson wrote:
> Change scsi_check_sense HARDWARE_ERROR check to return ADD_TO_MLQUEUE
> to allow retries to occur without restriction of blk_noretry_request
> check.
Correct. We always should retry here.
>
> Signed-off-by: Mike Anderson <andmike@linux.vnet.ibm.com>
Signed-off-by: Hannes Reinecke <hare@suse.de>
Cheers,
Hannes
--
Dr. Hannes Reinecke zSeries & Storage
hare@suse.de +49 911 74053 688
SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg
GF: Markus Rex, HRB 16746 (AG Nürnberg)
--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH 1/2] scsi: scsi_dh check_sense return ADD_TO_MLQUEUE
2008-08-25 12:33 ` Hannes Reinecke
@ 2008-08-25 20:02 ` Chandra Seetharaman
0 siblings, 0 replies; 6+ messages in thread
From: Chandra Seetharaman @ 2008-08-25 20:02 UTC (permalink / raw)
To: Linux SCSI Mailing list; +Cc: Mike Anderson, Hannes Reinecke
On Mon, 2008-08-25 at 14:33 +0200, Hannes Reinecke wrote:
> Hi Mike,
>
> Mike Anderson wrote:
> > Change scsi_dh check_sense functions to return ADD_TO_MLQUEUE
> > to allow retries to occur without restriction of blk_noretry_request
> > check.
> >
> Correct. Error on my side.
>
> > Signed-off-by: Mike Anderson <andmike@linux.vnet.ibm.com>
> Signed-off-by: Hannes Reinecke <hare@suse.de>
Signed-off-by: Chandra Seetharaman <sekharan@us.ibm.com>
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2008-08-25 20:03 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-08-12 19:11 [PATCH 0/2] scsi: sense retry Mike Anderson
2008-08-12 19:11 ` [PATCH 1/2] scsi: scsi_dh check_sense return ADD_TO_MLQUEUE Mike Anderson
2008-08-25 12:33 ` Hannes Reinecke
2008-08-25 20:02 ` Chandra Seetharaman
2008-08-12 19:11 ` [PATCH 2/2] scsi: scsi_check_sense HARDWARE_ERROR " Mike Anderson
2008-08-25 12:34 ` Hannes Reinecke
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox