public inbox for linux-scsi@vger.kernel.org
 help / color / mirror / Atom feed
* [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