Author: baggins Date: Tue Dec 30 23:40:16 2008 GMT Module: SOURCES Tag: LINUX_2_6_27 ---- Log message: - added bunch of SCSI DH fixes
---- Files affected: SOURCES: kernel-small_fixes.patch (1.1.2.15 -> 1.1.2.15.2.1) ---- Diffs: ================================================================ Index: SOURCES/kernel-small_fixes.patch diff -u SOURCES/kernel-small_fixes.patch:1.1.2.15 SOURCES/kernel-small_fixes.patch:1.1.2.15.2.1 --- SOURCES/kernel-small_fixes.patch:1.1.2.15 Sun Dec 14 09:57:50 2008 +++ SOURCES/kernel-small_fixes.patch Wed Dec 31 00:40:11 2008 @@ -159,3 +159,193 @@ #include "squashfs.h" +From: Hannes Reinecke <[email protected]> +Subject: Retry ALUA device handler initialization on Unit Attention + +Whenever we receive a UNIT ATTENTION sense code we should just retry +the command. No point in checking the various sense codes here. + +Signed-off-by: Hannes Reinecke <[email protected]> + +diff --git a/drivers/scsi/device_handler/scsi_dh_alua.c b/drivers/scsi/device_handler/scsi_dh_alua.c +index e356b43..a3660a6 100644 +--- a/drivers/scsi/device_handler/scsi_dh_alua.c ++++ b/drivers/scsi/device_handler/scsi_dh_alua.c +@@ -444,24 +444,10 @@ static int alua_check_sense(struct scsi_device *sdev, + return SUCCESS; + break; + case UNIT_ATTENTION: +- if (sense_hdr->asc == 0x29 && sense_hdr->ascq == 0x00) +- /* +- * Power On, Reset, or Bus Device Reset, just retry. +- */ +- return ADD_TO_MLQUEUE; +- if (sense_hdr->asc == 0x2a && sense_hdr->ascq == 0x06) { +- /* +- * ALUA state changed +- */ +- return ADD_TO_MLQUEUE; +- } +- if (sense_hdr->asc == 0x2a && sense_hdr->ascq == 0x07) { +- /* +- * Implicit ALUA state transition failed +- */ +- return ADD_TO_MLQUEUE; +- } +- break; ++ /* ++ * Just retry for UNIT_ATTENTION ++ */ ++ return ADD_TO_MLQUEUE; + } + + return SCSI_RETURN_NOT_HANDLED; +From: Hannes Reinecke <[email protected]> +Subject: Always send STPG for explicit tgps mode + +When we are in explicit tgps mode we should always send an STPG +command to enable the active/optimized mode. + +Signed-off-by: Hannes Reinecke <[email protected]> + +--- + drivers/scsi/device_handler/scsi_dh_alua.c | 10 ++++------ + 1 file changed, 4 insertions(+), 6 deletions(-) + +--- a/drivers/scsi/device_handler/scsi_dh_alua.c ++++ b/drivers/scsi/device_handler/scsi_dh_alua.c +@@ -593,13 +593,11 @@ static int alua_activate(struct scsi_dev + struct alua_dh_data *h = get_alua_data(sdev); + int err = SCSI_DH_OK; + +- if (h->group_id != -1) { +- err = alua_rtpg(sdev, h); +- if (err != SCSI_DH_OK) +- goto out; +- } ++ err = alua_rtpg(sdev, h); ++ if (err != SCSI_DH_OK) ++ goto out; + +- if (h->tpgs == TPGS_MODE_EXPLICIT && h->state != TPGS_STATE_OPTIMIZED) ++ if ((h->tpgs & TPGS_MODE_EXPLICIT) && h->state != TPGS_STATE_OPTIMIZED) + err = alua_stpg(sdev, TPGS_STATE_OPTIMIZED, h); + + out: +Subject: Initialize path state to be passive when path is not owned +From: Chandra Seetharaman <[email protected]> +Date: Thu Nov 20 14:14:39 2008 +0100: +References: bnc#442676 + +Set the path state to be passive when we learn that the controller does +not own the path to the LUN. + +This will avoid sending even a single i/o thru the passive path at the +probe time. + +Signed-off-by: Chandra Seetharaman <[email protected]> +Signed-off-by: Hannes Reinecke <[email protected]> + +--- + drivers/scsi/device_handler/scsi_dh_rdac.c | 3 +++ + 1 file changed, 3 insertions(+) + +--- a/drivers/scsi/device_handler/scsi_dh_rdac.c ++++ b/drivers/scsi/device_handler/scsi_dh_rdac.c +@@ -403,6 +403,9 @@ static int check_ownership(struct scsi_d + } + } + ++ if (h->lun_state == RDAC_LUN_UNOWNED) ++ h->state = RDAC_STATE_PASSIVE; ++ + return err; + } + +Subject: Retry mode select in RDAC device handler +From: Chandra Seetharaman <[email protected]> +References: bnc#441337 + +When the mode select sent to the controller fails with the retryable +error, it is better to retry the mode_select from the hardware handler +itself, instead of propagating the failure to dm-multipath. + +Signed-off-by: Chandra Seetharaman <[email protected]> +Signed-off-by: Hannes Reinecke <[email protected]> + +--- +--- + drivers/scsi/device_handler/scsi_dh_rdac.c | 15 +++++++++++---- + 1 file changed, 11 insertions(+), 4 deletions(-) + +--- a/drivers/scsi/device_handler/scsi_dh_rdac.c ++++ b/drivers/scsi/device_handler/scsi_dh_rdac.c +@@ -24,6 +24,7 @@ + #include <scsi/scsi_dh.h> + + #define RDAC_NAME "rdac" ++#define RDAC_RETRY_COUNT 5 + + /* + * LSI mode page stuff +@@ -475,21 +476,27 @@ static int send_mode_select(struct scsi_ + { + struct request *rq; + struct request_queue *q = sdev->request_queue; +- int err = SCSI_DH_RES_TEMP_UNAVAIL; ++ int err, retry_cnt = RDAC_RETRY_COUNT; + ++retry: ++ err = SCSI_DH_RES_TEMP_UNAVAIL; + rq = rdac_failover_get(sdev, h); + if (!rq) + goto done; + +- sdev_printk(KERN_INFO, sdev, "queueing MODE_SELECT command.\n"); ++ sdev_printk(KERN_INFO, sdev, "%s MODE_SELECT command.\n", ++ (retry_cnt == RDAC_RETRY_COUNT) ? "queueing" : "retrying"); + + err = blk_execute_rq(q, NULL, rq, 1); +- if (err != SCSI_DH_OK) ++ blk_put_request(rq); ++ if (err != SCSI_DH_OK) { + err = mode_select_handle_sense(sdev, h->sense); ++ if (err == SCSI_DH_RETRY && retry_cnt--) ++ goto retry; ++ } + if (err == SCSI_DH_OK) + h->state = RDAC_STATE_ACTIVE; + +- blk_put_request(rq); + done: + return err; + } +Subject: scsi_dh_rdac: make sure the ownership is set correctly +From: Chandra Seetharaman <[email protected]> +Patch-Mainline: 2.6.28 +References: bnc#441337 + +When the controller ownership is changed (from passive to active), +check_ownership() doesn't set the state of the device to ACTIVE. + +This patch fixes the problem. + +Signed-off-by: Chandra Seetharaman <[email protected]> +Reported and tested by: "Moger, Babu" <[email protected]> +Signed-off-by: Hannes Reinecke <[email protected]> + +--- +--- + drivers/scsi/device_handler/scsi_dh_rdac.c | 1 + + 1 file changed, 1 insertion(+) + +--- a/drivers/scsi/device_handler/scsi_dh_rdac.c ++++ b/drivers/scsi/device_handler/scsi_dh_rdac.c +@@ -386,6 +386,7 @@ static int check_ownership(struct scsi_d + struct c9_inquiry *inqp; + + h->lun_state = RDAC_LUN_UNOWNED; ++ h->state = RDAC_STATE_ACTIVE; + err = submit_inquiry(sdev, 0xC9, sizeof(struct c9_inquiry), h); + if (err == SCSI_DH_OK) { + inqp = &h->inq.c9; ================================================================ ---- CVS-web: http://cvs.pld-linux.org/cgi-bin/cvsweb.cgi/SOURCES/kernel-small_fixes.patch?r1=1.1.2.15&r2=1.1.2.15.2.1&f=u _______________________________________________ pld-cvs-commit mailing list [email protected] http://lists.pld-linux.org/mailman/listinfo/pld-cvs-commit
