]> git.ipfire.org Git - people/pmueller/ipfire-2.x.git/blame - src/patches/suse-2.6.27.39/patches.fixes/scsi-dh-rdac-sles10sp3-fixes
Fix oinkmaster patch.
[people/pmueller/ipfire-2.x.git] / src / patches / suse-2.6.27.39 / patches.fixes / scsi-dh-rdac-sles10sp3-fixes
CommitLineData
82094b55
AF
1From: Vijay Kumar <vijay.chauhan@lsi.com>
2Date: Mon, 21 Sep 2009 15:00:22 +0200
3Subject: scsi_dh_rdac: Include fixes from SLES10 SP3
4References: bnc#539271
5
6This patch updates the scsi_dh_rdac device handler with
7fixes already present in SLES10 SP3:
8
91) Adding sense 02/A1/02 in rdac_check_sense
10
112) Changing mode_select_handle_sense format to switch-case
12
133) Correcting entry for struct scsi_dh_devlist rdac; adding 3rd argument for
14{"LSI", "INF-01-00"}
15{"ENGENIO", "INF-01-00"}
16
17Signed-off-by: Vijay Kumar <vijay.chauhan@lsi.com>
18Signed-off-by: Hannes Reinecke <hare@suse.de>
19---
20 drivers/scsi/device_handler/scsi_dh_rdac.c | 48 +++++++++++++++++++--------
21 1 files changed, 34 insertions(+), 14 deletions(-)
22
23diff --git a/drivers/scsi/device_handler/scsi_dh_rdac.c b/drivers/scsi/device_handler/scsi_dh_rdac.c
24index 6d48426..0bd33ee 100644
25--- a/drivers/scsi/device_handler/scsi_dh_rdac.c
26+++ b/drivers/scsi/device_handler/scsi_dh_rdac.c
27@@ -449,27 +449,41 @@ static int mode_select_handle_sense(struct scsi_device *sdev,
28 unsigned char *sensebuf)
29 {
30 struct scsi_sense_hdr sense_hdr;
31- int sense, err = SCSI_DH_IO, ret;
32+ int err = SCSI_DH_IO, ret;
33
34 ret = scsi_normalize_sense(sensebuf, SCSI_SENSE_BUFFERSIZE, &sense_hdr);
35 if (!ret)
36 goto done;
37
38 err = SCSI_DH_OK;
39- sense = (sense_hdr.sense_key << 16) | (sense_hdr.asc << 8) |
40- sense_hdr.ascq;
41- /* If it is retryable failure, submit the c9 inquiry again */
42- if (sense_hdr.sense_key == 6 || sense == 0x59136 || sense == 0xb8b02) {
43- /* 0x59136 - Command lock contention
44- * 0xb8b02 - Quiescense achieved
45- * 0x6xxxx - Unit Attention
46- */
47+
48+ switch (sense_hdr.sense_key) {
49+ case NO_SENSE:
50+ case ABORTED_COMMAND:
51+ case UNIT_ATTENTION:
52+ err = SCSI_DH_RETRY;
53+ break;
54+ case NOT_READY:
55+ if (sense_hdr.asc == 0x04 && sense_hdr.ascq == 0x01)
56+ /* LUN Not Ready and is in the Process
57+ * of becoming ready
58+ */
59+ err = SCSI_DH_RETRY;
60+ break;
61+ case ILLEGAL_REQUEST:
62+ if (sense_hdr.asc == 0x91 && sense_hdr.ascq == 0x36)
63+ /*
64+ * Command Lock contention
65+ */
66 err = SCSI_DH_RETRY;
67+ break;
68+ default:
69+ sdev_printk(KERN_INFO, sdev,
70+ "MODE_SELECT failed with sense %02x/%02x/%02x.\n",
71+ sense_hdr.sense_key, sense_hdr.asc, sense_hdr.ascq);
72+
73 }
74
75- if (sense)
76- sdev_printk(KERN_INFO, sdev,
77- "MODE_SELECT failed with sense 0x%x.\n", sense);
78 done:
79 return err;
80 }
81@@ -566,6 +580,12 @@ static int rdac_check_sense(struct scsi_device *sdev,
82 * Just retry and wait.
83 */
84 return ADD_TO_MLQUEUE;
85+ if (sense_hdr->asc == 0xA1 && sense_hdr->ascq == 0x02)
86+ /* LUN Not Ready - Quiescense in progress
87+ * or has been achieved
88+ * Just retry.
89+ */
90+ return ADD_TO_MLQUEUE;
91 break;
92 case ILLEGAL_REQUEST:
93 if (sense_hdr->asc == 0x94 && sense_hdr->ascq == 0x01) {
94@@ -615,8 +635,8 @@ static const struct scsi_dh_devlist rdac_dev_list[] = {
95 {"DELL", "MD3000i", 0},
96 {"DELL", "MD32xx", 0},
97 {"DELL", "MD32xxi", 0},
98- {"LSI", "INF-01-00"},
99- {"ENGENIO", "INF-01-00"},
100+ {"LSI", "INF-01-00", 0},
101+ {"ENGENIO", "INF-01-00", 0},
102 {NULL, NULL, 0},
103 };
104
105--
1061.5.3.2
107