]>
Commit | Line | Data |
---|---|---|
1 | From: Gerald Schaefer <geraldsc@de.ibm.com> | |
2 | Subject: zfcp: Fix locking problem found during port offline test | |
3 | References: bnc#482818,LTC#51957 | |
4 | ||
5 | Symptom: Error message from lock dependency checker. | |
6 | Problem: Softirqs not disabled. | |
7 | Solution: Always disable softirqs when acquiring queue lock. | |
8 | ||
9 | Acked-by: John Jolly <jjolly@suse.de> | |
10 | --- | |
11 | ||
12 | drivers/s390/scsi/zfcp_fsf.c | 18 +++++++++--------- | |
13 | 1 file changed, 9 insertions(+), 9 deletions(-) | |
14 | ||
15 | Index: linux-sles11/drivers/s390/scsi/zfcp_fsf.c | |
16 | =================================================================== | |
17 | --- linux-sles11.orig/drivers/s390/scsi/zfcp_fsf.c | |
18 | +++ linux-sles11/drivers/s390/scsi/zfcp_fsf.c | |
19 | @@ -927,8 +927,8 @@ struct zfcp_fsf_req *zfcp_fsf_abort_fcp_ | |
20 | struct qdio_buffer_element *sbale; | |
21 | struct zfcp_fsf_req *req = NULL; | |
22 | ||
23 | - spin_lock(&adapter->req_q_lock); | |
24 | - if (!zfcp_fsf_sbal_available(adapter)) | |
25 | + spin_lock_bh(&adapter->req_q_lock); | |
26 | + if (zfcp_fsf_req_sbal_get(adapter)) | |
27 | goto out; | |
28 | req = zfcp_fsf_req_create(adapter, FSF_QTCB_ABORT_FCP_CMND, | |
29 | req_flags, adapter->pool.fsf_req_abort); | |
30 | @@ -959,7 +959,7 @@ out_error_free: | |
31 | zfcp_fsf_req_free(req); | |
32 | req = NULL; | |
33 | out: | |
34 | - spin_unlock(&adapter->req_q_lock); | |
35 | + spin_unlock_bh(&adapter->req_q_lock); | |
36 | return req; | |
37 | } | |
38 | ||
39 | @@ -1223,7 +1223,7 @@ int zfcp_fsf_exchange_config_data(struct | |
40 | int retval = -EIO; | |
41 | ||
42 | spin_lock_bh(&adapter->req_q_lock); | |
43 | - if (!zfcp_fsf_sbal_available(adapter)) | |
44 | + if (zfcp_fsf_req_sbal_get(adapter)) | |
45 | goto out; | |
46 | req = zfcp_fsf_req_create(adapter, | |
47 | FSF_QTCB_EXCHANGE_CONFIG_DATA, | |
48 | @@ -1319,7 +1319,7 @@ int zfcp_fsf_exchange_port_data(struct z | |
49 | return -EOPNOTSUPP; | |
50 | ||
51 | spin_lock_bh(&adapter->req_q_lock); | |
52 | - if (!zfcp_fsf_sbal_available(adapter)) | |
53 | + if (zfcp_fsf_req_sbal_get(adapter)) | |
54 | goto out; | |
55 | req = zfcp_fsf_req_create(adapter, FSF_QTCB_EXCHANGE_PORT_DATA, | |
56 | ZFCP_REQ_AUTO_CLEANUP, | |
57 | @@ -1365,7 +1365,7 @@ int zfcp_fsf_exchange_port_data_sync(str | |
58 | return -EOPNOTSUPP; | |
59 | ||
60 | spin_lock_bh(&adapter->req_q_lock); | |
61 | - if (!zfcp_fsf_sbal_available(adapter)) | |
62 | + if (zfcp_fsf_req_sbal_get(adapter)) | |
63 | goto out; | |
64 | ||
65 | req = zfcp_fsf_req_create(adapter, FSF_QTCB_EXCHANGE_PORT_DATA, 0, | |
66 | @@ -2458,8 +2458,8 @@ struct zfcp_fsf_req *zfcp_fsf_send_fcp_c | |
67 | ZFCP_STATUS_COMMON_UNBLOCKED))) | |
68 | return NULL; | |
69 | ||
70 | - spin_lock(&adapter->req_q_lock); | |
71 | - if (!zfcp_fsf_sbal_available(adapter)) | |
72 | + spin_lock_bh(&adapter->req_q_lock); | |
73 | + if (zfcp_fsf_req_sbal_get(adapter)) | |
74 | goto out; | |
75 | req = zfcp_fsf_req_create(adapter, FSF_QTCB_FCP_CMND, req_flags, | |
76 | adapter->pool.fsf_req_scsi); | |
77 | @@ -2493,7 +2493,7 @@ struct zfcp_fsf_req *zfcp_fsf_send_fcp_c | |
78 | zfcp_fsf_req_free(req); | |
79 | req = NULL; | |
80 | out: | |
81 | - spin_unlock(&adapter->req_q_lock); | |
82 | + spin_unlock_bh(&adapter->req_q_lock); | |
83 | return req; | |
84 | } | |
85 |