diff mbox

scsi_dh_rdac: Retry for NOT_READY(02/04/01) in rdac device handler

Message ID 0D1E8821739E724A86F4D16902CE275C1410F4D4B1@inbmail01.lsi.com (mailing list archive)
State Accepted, archived
Headers show

Commit Message

Chauhan, Vijay April 20, 2009, 12:44 p.m. UTC
This patch resolves the following issue. Please give your comment.

> I am having issue with scsi_io_completion routine. During 
> device discovery, READ CAPACITY is failing with 02/04/01. It 
> has been retried 5 times(with NEED_RETRY) but when retry gets 
> exhausted ,scsi_io_completion simply ends the request without 
> trying with delay retry.  
> 
> Here scsi_io_completion routine checks for deferred sense and if 
> not found, it sets error with -EIO, which eventually ends the 
> request and doesnot allow for any more retries. I am seeing 
> deffered error being checked only for REQ_TYPE_BLOCK_PC 
> command type. Does it meant that command with cmd_type 
> REQ_TYPE_BLOCK_PC having current error sense should not be 
> retried in scsi_io_completion? If yes, then would it be 
> better to retry in rdac device handler in that case. 
> 
> 
> On Tues, 2009-03-10 at 15:47, James Bottomley wrote:
> > > +		if (sense_hdr->asc == 0x04 && sense_hdr->ascq == 0x01)
> > > +			/* LUN Not Ready - Logical Unit Not 
> > Ready and is in
> > > +			 * the process of becoming ready
> > > +			 * Just retry.
> > > +			 */
> > > +			return ADD_TO_MLQUEUE;
> > > +		if (sense_hdr->asc == 0x04 && sense_hdr->ascq == 0x04)
> > > +			/* LUN Not Ready - Format In Progress
> > > +			 *
> > > +			 * Just retry.
> > > +			 */
> > > +			return ADD_TO_MLQUEUE;
> > > +		if (sense_hdr->asc == 0x04  && sense_hdr->ascq == 0x07)
> > > +			/* LUN Not Ready - Storage controller 
> > cannot respond
> > > +			 * immediately to a PRIN or PROUT command.
> > > +			 * Just retry.
> > > +			 */
> > > +			return ADD_TO_MLQUEUE;
> > 
> > For all of these ... along with a few other not ready types, 
> > we already
> > do a delayed retry at the mid-layer (in 
> scsi_io_completion).  Is there
> > some problem that causes this to need to be handled here as well?

Thanks,
Vijay

---
During device discovery read capacity fails with 0x020401 and sets the device size to 0. As a reason any I/O submitted to this path gets killed at sd_prep_fn with BLKPREP_KILL. This patch is to retry for 0x020401. NEED_RETRY in scsi_decide_disposition does not give sufficient time for the device to become ready. 

Signed-off-by: Vijay Chauhan <vijay.chauhan@lsi.com>
---
--

--
dm-devel mailing list
dm-devel@redhat.com
https://www.redhat.com/mailman/listinfo/dm-devel

Comments

Chandra Seetharaman April 27, 2009, 2:43 p.m. UTC | #1
On Mon, 2009-04-20 at 18:14 +0530, Chauhan, Vijay wrote:
> This patch resolves the following issue. Please give your comment.
> 
> > I am having issue with scsi_io_completion routine. During 
> > device discovery, READ CAPACITY is failing with 02/04/01. It 
> > has been retried 5 times(with NEED_RETRY) but when retry gets 
> > exhausted ,scsi_io_completion simply ends the request without 
> > trying with delay retry.  
> > 
> > Here scsi_io_completion routine checks for deferred sense and if 
> > not found, it sets error with -EIO, which eventually ends the 
> > request and doesnot allow for any more retries. I am seeing 
> > deffered error being checked only for REQ_TYPE_BLOCK_PC 
> > command type. Does it meant that command with cmd_type 
> > REQ_TYPE_BLOCK_PC having current error sense should not be 
> > retried in scsi_io_completion? If yes, then would it be 
> > better to retry in rdac device handler in that case. 
> > 
> > 
> > On Tues, 2009-03-10 at 15:47, James Bottomley wrote:
> > > > +		if (sense_hdr->asc == 0x04 && sense_hdr->ascq == 0x01)
> > > > +			/* LUN Not Ready - Logical Unit Not 
> > > Ready and is in
> > > > +			 * the process of becoming ready
> > > > +			 * Just retry.
> > > > +			 */
> > > > +			return ADD_TO_MLQUEUE;
> > > > +		if (sense_hdr->asc == 0x04 && sense_hdr->ascq == 0x04)
> > > > +			/* LUN Not Ready - Format In Progress
> > > > +			 *
> > > > +			 * Just retry.
> > > > +			 */
> > > > +			return ADD_TO_MLQUEUE;
> > > > +		if (sense_hdr->asc == 0x04  && sense_hdr->ascq == 0x07)
> > > > +			/* LUN Not Ready - Storage controller 
> > > cannot respond
> > > > +			 * immediately to a PRIN or PROUT command.
> > > > +			 * Just retry.
> > > > +			 */
> > > > +			return ADD_TO_MLQUEUE;
> > > 
> > > For all of these ... along with a few other not ready types, 
> > > we already
> > > do a delayed retry at the mid-layer (in 
> > scsi_io_completion).  Is there
> > > some problem that causes this to need to be handled here as well?
> 
> Thanks,
> Vijay
> 
> ---
> During device discovery read capacity fails with 0x020401 and sets the device size to 0. As a reason any I/O submitted to this path gets killed at sd_prep_fn with BLKPREP_KILL. This patch is to retry for 0x020401. NEED_RETRY in scsi_decide_disposition does not give sufficient time for the device to become ready. 
> 
> Signed-off-by: Vijay Chauhan <vijay.chauhan@lsi.com>

Acked-by: Chandra Seetahraman <sekharan@us.ibm.com>

> ---
> --- linux-2.6.30-rc2/drivers/scsi/device_handler/scsi_dh_rdac.c.orig	2009-04-20 23:07:14.000000000 +0530
> +++ linux-2.6.30-rc2/drivers/scsi/device_handler/scsi_dh_rdac.c	2009-04-20 23:11:27.000000000 +0530
> @@ -561,6 +561,12 @@ static int rdac_check_sense(struct scsi_
>  	struct rdac_dh_data *h = get_rdac_data(sdev);
>  	switch (sense_hdr->sense_key) {
>  	case NOT_READY:
> +		if (sense_hdr->asc == 0x04 && sense_hdr->ascq == 0x01)
> +			/* LUN Not Ready - Logical Unit Not Ready and is in
> +			* the process of becoming ready
> +			* Just retry.
> +			*/
> +			return ADD_TO_MLQUEUE;
>  		if (sense_hdr->asc == 0x04 && sense_hdr->ascq == 0x81)
>  			/* LUN Not Ready - Storage firmware incompatible
>  			 * Manual code synchonisation required.
> ----
> 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

--
dm-devel mailing list
dm-devel@redhat.com
https://www.redhat.com/mailman/listinfo/dm-devel
diff mbox

Patch

--- linux-2.6.30-rc2/drivers/scsi/device_handler/scsi_dh_rdac.c.orig	2009-04-20 23:07:14.000000000 +0530
+++ linux-2.6.30-rc2/drivers/scsi/device_handler/scsi_dh_rdac.c	2009-04-20 23:11:27.000000000 +0530
@@ -561,6 +561,12 @@  static int rdac_check_sense(struct scsi_
 	struct rdac_dh_data *h = get_rdac_data(sdev);
 	switch (sense_hdr->sense_key) {
 	case NOT_READY:
+		if (sense_hdr->asc == 0x04 && sense_hdr->ascq == 0x01)
+			/* LUN Not Ready - Logical Unit Not Ready and is in
+			* the process of becoming ready
+			* Just retry.
+			*/
+			return ADD_TO_MLQUEUE;
 		if (sense_hdr->asc == 0x04 && sense_hdr->ascq == 0x81)
 			/* LUN Not Ready - Storage firmware incompatible
 			 * Manual code synchonisation required.