--- /dev/null
+From: Gerald Schaefer <geraldsc@de.ibm.com>
+Subject: zfcp: Fix locking problem found during port offline test
+References: bnc#482818,LTC#51957
+
+Symptom: Error message from lock dependency checker.
+Problem: Softirqs not disabled.
+Solution: Always disable softirqs when acquiring queue lock.
+
+Acked-by: John Jolly <jjolly@suse.de>
+---
+
+ drivers/s390/scsi/zfcp_fsf.c | 18 +++++++++---------
+ 1 file changed, 9 insertions(+), 9 deletions(-)
+
+Index: linux-sles11/drivers/s390/scsi/zfcp_fsf.c
+===================================================================
+--- linux-sles11.orig/drivers/s390/scsi/zfcp_fsf.c
++++ linux-sles11/drivers/s390/scsi/zfcp_fsf.c
+@@ -927,8 +927,8 @@ struct zfcp_fsf_req *zfcp_fsf_abort_fcp_
+ struct qdio_buffer_element *sbale;
+ struct zfcp_fsf_req *req = NULL;
+
+- spin_lock(&adapter->req_q_lock);
+- if (!zfcp_fsf_sbal_available(adapter))
++ spin_lock_bh(&adapter->req_q_lock);
++ if (zfcp_fsf_req_sbal_get(adapter))
+ goto out;
+ req = zfcp_fsf_req_create(adapter, FSF_QTCB_ABORT_FCP_CMND,
+ req_flags, adapter->pool.fsf_req_abort);
+@@ -959,7 +959,7 @@ out_error_free:
+ zfcp_fsf_req_free(req);
+ req = NULL;
+ out:
+- spin_unlock(&adapter->req_q_lock);
++ spin_unlock_bh(&adapter->req_q_lock);
+ return req;
+ }
+
+@@ -1223,7 +1223,7 @@ int zfcp_fsf_exchange_config_data(struct
+ int retval = -EIO;
+
+ spin_lock_bh(&adapter->req_q_lock);
+- if (!zfcp_fsf_sbal_available(adapter))
++ if (zfcp_fsf_req_sbal_get(adapter))
+ goto out;
+ req = zfcp_fsf_req_create(adapter,
+ FSF_QTCB_EXCHANGE_CONFIG_DATA,
+@@ -1319,7 +1319,7 @@ int zfcp_fsf_exchange_port_data(struct z
+ return -EOPNOTSUPP;
+
+ spin_lock_bh(&adapter->req_q_lock);
+- if (!zfcp_fsf_sbal_available(adapter))
++ if (zfcp_fsf_req_sbal_get(adapter))
+ goto out;
+ req = zfcp_fsf_req_create(adapter, FSF_QTCB_EXCHANGE_PORT_DATA,
+ ZFCP_REQ_AUTO_CLEANUP,
+@@ -1365,7 +1365,7 @@ int zfcp_fsf_exchange_port_data_sync(str
+ return -EOPNOTSUPP;
+
+ spin_lock_bh(&adapter->req_q_lock);
+- if (!zfcp_fsf_sbal_available(adapter))
++ if (zfcp_fsf_req_sbal_get(adapter))
+ goto out;
+
+ req = zfcp_fsf_req_create(adapter, FSF_QTCB_EXCHANGE_PORT_DATA, 0,
+@@ -2458,8 +2458,8 @@ struct zfcp_fsf_req *zfcp_fsf_send_fcp_c
+ ZFCP_STATUS_COMMON_UNBLOCKED)))
+ return NULL;
+
+- spin_lock(&adapter->req_q_lock);
+- if (!zfcp_fsf_sbal_available(adapter))
++ spin_lock_bh(&adapter->req_q_lock);
++ if (zfcp_fsf_req_sbal_get(adapter))
+ goto out;
+ req = zfcp_fsf_req_create(adapter, FSF_QTCB_FCP_CMND, req_flags,
+ adapter->pool.fsf_req_scsi);
+@@ -2493,7 +2493,7 @@ struct zfcp_fsf_req *zfcp_fsf_send_fcp_c
+ zfcp_fsf_req_free(req);
+ req = NULL;
+ out:
+- spin_unlock(&adapter->req_q_lock);
++ spin_unlock_bh(&adapter->req_q_lock);
+ return req;
+ }
+