]>
Commit | Line | Data |
---|---|---|
2cb7cef9 BS |
1 | From: Gerald Schaefer <geraldsc@de.ibm.com> |
2 | Subject: zfcp: Recover from stalled outbound queue | |
3 | References: bnc#518291,LTC#54460 | |
4 | ||
5 | Symptom: In some error scenarious, the channel can stall. To | |
6 | Linux this looks like a stall in the outbound queue. | |
7 | Linux has to recover this. | |
8 | Problem: There is no trigger to recover the queues if the outbound | |
9 | queue stalls. | |
10 | Solution: When trying to issue a non-SCSI command, zfcp waits for | |
11 | 5 seconds to get a free SBAL in the queue. Use this timeout | |
12 | as a trigger: If after 5 seconds there is no free SBAL, | |
13 | assume a stalled outbound queue and trigger recovery. | |
14 | ||
15 | Acked-by: John Jolly <jjolly@suse.de> | |
16 | --- | |
17 | drivers/s390/scsi/zfcp_dbf.c | 2 +- | |
18 | drivers/s390/scsi/zfcp_fsf.c | 5 ++++- | |
19 | 2 files changed, 5 insertions(+), 2 deletions(-) | |
20 | ||
21 | --- a/drivers/s390/scsi/zfcp_fsf.c 2009-06-23 14:24:48.000000000 +0200 | |
22 | +++ b/drivers/s390/scsi/zfcp_fsf.c 2009-06-23 14:26:00.000000000 +0200 | |
23 | @@ -668,8 +668,11 @@ static int zfcp_fsf_req_sbal_get(struct | |
24 | zfcp_fsf_sbal_check(adapter), 5 * HZ); | |
25 | if (ret > 0) | |
26 | return 0; | |
27 | - if (!ret) | |
28 | + if (!ret) { | |
29 | atomic_inc(&adapter->qdio_outb_full); | |
30 | + /* assume hanging outbound queue, try queue recovery */ | |
31 | + zfcp_erp_adapter_reopen(adapter, 0, 77, NULL); | |
32 | + } | |
33 | ||
34 | spin_lock_bh(&adapter->req_q_lock); | |
35 | return -EIO; | |
36 | --- a/drivers/s390/scsi/zfcp_dbf.c 2009-06-23 14:20:41.000000000 +0200 | |
37 | +++ b/drivers/s390/scsi/zfcp_dbf.c 2009-06-23 14:25:50.000000000 +0200 | |
38 | @@ -567,7 +567,7 @@ static const char *zfcp_rec_dbf_ids[] = | |
39 | [74] = "unit recovery follow-up after successful port recovery", | |
40 | [75] = "port recovery retry after failure", | |
41 | [76] = "unit recovery retry after failure", | |
42 | - [77] = "", | |
43 | + [77] = "adapter reopen from queue stall", | |
44 | [78] = "duplicate request id", | |
45 | [79] = "link down", | |
46 | [80] = "exclusive read-only unit access unsupported", |