]> git.ipfire.org Git - ipfire-2.x.git/blobdiff - src/patches/suse-2.6.27.31/patches.arch/s390-10-02-zfcp_wait_sbal.patch
Move xen patchset to new version's subdir.
[ipfire-2.x.git] / src / patches / suse-2.6.27.31 / patches.arch / s390-10-02-zfcp_wait_sbal.patch
diff --git a/src/patches/suse-2.6.27.31/patches.arch/s390-10-02-zfcp_wait_sbal.patch b/src/patches/suse-2.6.27.31/patches.arch/s390-10-02-zfcp_wait_sbal.patch
new file mode 100644 (file)
index 0000000..6f6e607
--- /dev/null
@@ -0,0 +1,85 @@
+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;
+ }