[SCSI] scsi_dh_rdac: Retry for NOT_READY(02/04/01) in rdac device handler
authorChauhan, Vijay <Vijay.Chauhan@lsi.com>
Mon, 20 Apr 2009 12:44:23 +0000 (18:14 +0530)
committerJames Bottomley <James.Bottomley@HansenPartnership.com>
Wed, 20 May 2009 22:21:14 +0000 (17:21 -0500)
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>
Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
drivers/scsi/device_handler/scsi_dh_rdac.c

index 43b8c51e98d090d5cdf1f333fc449730e6002d1e..fd0544f7da81700d2e586387b0f20ae1b0cd64d2 100644 (file)
@@ -561,6 +561,12 @@ static int rdac_check_sense(struct scsi_device *sdev,
        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.