]>
Commit | Line | Data |
---|---|---|
82094b55 AF |
1 | From: Gerald Schaefer <geraldsc@de.ibm.com> |
2 | Subject: cio: number of internal I/O retries | |
3 | References: bnc#533267,LTC#55492 | |
4 | ||
5 | Symptom: A device is untruly considered nonfunctional. | |
6 | Problem: If a device has n paths and the device is not path- | |
7 | grouped and an internal I/O command fails, then the | |
8 | control unit presents the error sense n times on each | |
9 | different path. cio does only 5 retries, i.e. devices | |
10 | with 5 or more paths run out of retries before their | |
11 | functional status can actually be determined. | |
12 | Solution: Increase the number of retries to 10. | |
13 | ||
14 | Acked-by: John Jolly <jjolly@suse.de> | |
15 | ||
16 | Index: linux-sles11/drivers/s390/cio/device_id.c | |
17 | =================================================================== | |
18 | --- linux-sles11.orig/drivers/s390/cio/device_id.c 2009-08-17 14:49:43.000000000 +0200 | |
19 | +++ linux-sles11/drivers/s390/cio/device_id.c 2009-08-17 14:52:00.000000000 +0200 | |
20 | @@ -164,7 +164,7 @@ | |
21 | return ret; | |
22 | } | |
23 | cdev->private->imask >>= 1; | |
24 | - cdev->private->iretry = 5; | |
25 | + cdev->private->iretry = 10; | |
26 | } | |
27 | return ret; | |
28 | } | |
29 | @@ -176,7 +176,7 @@ | |
30 | ||
31 | memset (&cdev->private->senseid, 0, sizeof (struct senseid)); | |
32 | cdev->private->imask = 0x80; | |
33 | - cdev->private->iretry = 5; | |
34 | + cdev->private->iretry = 10; | |
35 | ret = __ccw_device_sense_id_start(cdev); | |
36 | if (ret && ret != -EBUSY) | |
37 | ccw_device_sense_id_done(cdev, ret); | |
38 | @@ -299,7 +299,7 @@ | |
39 | case -EACCES: /* channel is not operational. */ | |
40 | sch->lpm &= ~cdev->private->imask; | |
41 | cdev->private->imask >>= 1; | |
42 | - cdev->private->iretry = 5; | |
43 | + cdev->private->iretry = 10; | |
44 | /* fall through. */ | |
45 | case -EAGAIN: /* try again. */ | |
46 | ret = __ccw_device_sense_id_start(cdev); | |
47 | Index: linux-sles11/drivers/s390/cio/device_pgid.c | |
48 | =================================================================== | |
49 | --- linux-sles11.orig/drivers/s390/cio/device_pgid.c 2009-08-17 14:49:43.000000000 +0200 | |
50 | +++ linux-sles11/drivers/s390/cio/device_pgid.c 2009-08-17 14:52:00.000000000 +0200 | |
51 | @@ -88,7 +88,7 @@ | |
52 | ||
53 | } | |
54 | cdev->private->imask >>= 1; | |
55 | - cdev->private->iretry = 5; | |
56 | + cdev->private->iretry = 10; | |
57 | i++; | |
58 | } | |
59 | ||
60 | @@ -105,7 +105,7 @@ | |
61 | ||
62 | cdev->private->state = DEV_STATE_SENSE_PGID; | |
63 | cdev->private->imask = 0x80; | |
64 | - cdev->private->iretry = 5; | |
65 | + cdev->private->iretry = 10; | |
66 | memset (&cdev->private->pgid, 0, sizeof (cdev->private->pgid)); | |
67 | ret = __ccw_device_sense_pgid_start(cdev); | |
68 | if (ret && ret != -EBUSY) | |
69 | @@ -215,7 +215,7 @@ | |
70 | /* Fall through. */ | |
71 | case 0: /* Sense Path Group ID successful. */ | |
72 | cdev->private->imask >>= 1; | |
73 | - cdev->private->iretry = 5; | |
74 | + cdev->private->iretry = 10; | |
75 | /* Fall through. */ | |
76 | case -EAGAIN: /* Try again. */ | |
77 | ret = __ccw_device_sense_pgid_start(cdev); | |
78 | @@ -404,7 +404,7 @@ | |
79 | sch = to_subchannel(cdev->dev.parent); | |
80 | /* Repeat for all paths. */ | |
81 | for (; cdev->private->imask; cdev->private->imask >>= 1, | |
82 | - cdev->private->iretry = 5) { | |
83 | + cdev->private->iretry = 10) { | |
84 | if ((cdev->private->imask & sch->schib.pmcw.pam) == 0) | |
85 | /* Path not available, try next. */ | |
86 | continue; | |
87 | @@ -460,7 +460,7 @@ | |
88 | sch->vpm |= sch->opm & cdev->private->imask; | |
89 | /* Go on with next path. */ | |
90 | cdev->private->imask >>= 1; | |
91 | - cdev->private->iretry = 5; | |
92 | + cdev->private->iretry = 10; | |
93 | __ccw_device_verify_start(cdev); | |
94 | break; | |
95 | case -EOPNOTSUPP: | |
96 | @@ -475,7 +475,7 @@ | |
97 | /* Retry */ | |
98 | sch->vpm = 0; | |
99 | cdev->private->imask = 0x80; | |
100 | - cdev->private->iretry = 5; | |
101 | + cdev->private->iretry = 10; | |
102 | /* fall through. */ | |
103 | case -EAGAIN: /* Try again. */ | |
104 | __ccw_device_verify_start(cdev); | |
105 | @@ -485,7 +485,7 @@ | |
106 | break; | |
107 | case -EACCES: /* channel is not operational. */ | |
108 | cdev->private->imask >>= 1; | |
109 | - cdev->private->iretry = 5; | |
110 | + cdev->private->iretry = 10; | |
111 | __ccw_device_verify_start(cdev); | |
112 | break; | |
113 | } | |
114 | @@ -498,7 +498,7 @@ | |
115 | ||
116 | cdev->private->flags.pgid_single = 0; | |
117 | cdev->private->imask = 0x80; | |
118 | - cdev->private->iretry = 5; | |
119 | + cdev->private->iretry = 10; | |
120 | ||
121 | /* Start with empty vpm. */ | |
122 | sch->vpm = 0; | |
123 | @@ -526,7 +526,7 @@ | |
124 | if (ret == 0) | |
125 | return; | |
126 | } | |
127 | - cdev->private->iretry = 5; | |
128 | + cdev->private->iretry = 10; | |
129 | cdev->private->imask >>= 1; | |
130 | } | |
131 | ccw_device_disband_done(cdev, (sch->lpm != 0) ? 0 : -ENODEV); | |
132 | @@ -575,7 +575,7 @@ | |
133 | break; | |
134 | case -EACCES: /* channel is not operational. */ | |
135 | cdev->private->imask >>= 1; | |
136 | - cdev->private->iretry = 5; | |
137 | + cdev->private->iretry = 10; | |
138 | __ccw_device_disband_start(cdev); | |
139 | break; | |
140 | } | |
141 | @@ -588,7 +588,7 @@ | |
142 | ccw_device_set_timeout(cdev, 60*HZ); | |
143 | ||
144 | cdev->private->flags.pgid_single = 0; | |
145 | - cdev->private->iretry = 5; | |
146 | + cdev->private->iretry = 10; | |
147 | cdev->private->imask = 0x80; | |
148 | __ccw_device_disband_start(cdev); | |
149 | } |