]> git.ipfire.org Git - people/pmueller/ipfire-2.x.git/blobdiff - src/patches/suse-2.6.27.31/patches.arch/s390-01-04-fcpperf-4-v2.patch
Imported linux-2.6.27.39 suse/xen patches.
[people/pmueller/ipfire-2.x.git] / src / patches / suse-2.6.27.31 / patches.arch / s390-01-04-fcpperf-4-v2.patch
diff --git a/src/patches/suse-2.6.27.31/patches.arch/s390-01-04-fcpperf-4-v2.patch b/src/patches/suse-2.6.27.31/patches.arch/s390-01-04-fcpperf-4-v2.patch
deleted file mode 100644 (file)
index 2e47784..0000000
+++ /dev/null
@@ -1,158 +0,0 @@
-From: Gerald Schaefer <geraldsc@de.ibm.com>
-Subject:     zfcp: add queue_full sysfs attribute
-References:  bnc#417243
-
-From: Stefan Raspl <raspl@linux.vnet.ibm.com>
-
-Adds a new sysfs attribute queue_full for adapters that records the number
-of incidents where a requests could not be submitted due to insufficient
-free space on the request queue.
-
-Signed-off-by: Stefan Raspl <raspl@linux.vnet.ibm.com>
-Signed-off-by: Martin Peschke <mp3@de.ibm.com>
-Signed-off-by: Christof Schmitt <christof.schmitt@de.ibm.com>
-
-Acked-by: John Jolly <jjolly@suse.de>
-
----
- drivers/s390/scsi/zfcp_def.h   |    1 +
- drivers/s390/scsi/zfcp_fsf.c   |   24 +++++++++++++++++-------
- drivers/s390/scsi/zfcp_qdio.c  |    1 +
- drivers/s390/scsi/zfcp_sysfs.c |   13 +++++++++++++
- 4 files changed, 32 insertions(+), 7 deletions(-)
-
---- a/drivers/s390/scsi/zfcp_def.h
-+++ b/drivers/s390/scsi/zfcp_def.h
-@@ -568,6 +568,7 @@ struct zfcp_adapter {
-       struct fsf_qtcb_bottom_port *stats_reset_data;
-       unsigned long           stats_reset;
-       struct work_struct      scan_work;
-+      atomic_t                qdio_outb_full;    /* queue full incidents */
- };
- struct zfcp_port {
---- a/drivers/s390/scsi/zfcp_fsf.c
-+++ b/drivers/s390/scsi/zfcp_fsf.c
-@@ -718,6 +718,14 @@ static int zfcp_fsf_sbal_check(struct zf
-       return 0;
- }
-+static int zfcp_fsf_sbal_available(struct zfcp_adapter *adapter)
-+{
-+      unsigned int count = atomic_read(&adapter->req_q.count);
-+      if (!count)
-+              atomic_inc(&adapter->qdio_outb_full);
-+      return count > 0;
-+}
-+
- static int zfcp_fsf_req_sbal_get(struct zfcp_adapter *adapter)
- {
-       long ret;
-@@ -728,6 +736,8 @@ static int zfcp_fsf_req_sbal_get(struct 
-                                       zfcp_fsf_sbal_check(req_q), 5 * HZ);
-       if (ret > 0)
-               return 0;
-+      if (!ret)
-+              atomic_inc(&adapter->qdio_outb_full);
-       spin_lock_bh(&req_q->lock);
-       return -EIO;
-@@ -986,7 +996,7 @@ struct zfcp_fsf_req *zfcp_fsf_abort_fcp_
-       struct zfcp_fsf_req *req = NULL;
-       spin_lock(&adapter->req_q.lock);
--      if (!atomic_read(&adapter->req_q.count))
-+      if (!zfcp_fsf_sbal_available(adapter))
-               goto out;
-       req = zfcp_fsf_req_create(adapter, FSF_QTCB_ABORT_FCP_CMND,
-                                 req_flags, adapter->pool.fsf_req_abort);
-@@ -1221,7 +1231,7 @@ int zfcp_fsf_send_els(struct zfcp_send_e
-               return -EBUSY;
-       spin_lock(&adapter->req_q.lock);
--      if (!atomic_read(&adapter->req_q.count))
-+      if (!zfcp_fsf_sbal_available(adapter))
-               goto out;
-       req = zfcp_fsf_req_create(adapter, FSF_QTCB_SEND_ELS,
-                                 ZFCP_REQ_AUTO_CLEANUP, NULL);
-@@ -1266,7 +1276,7 @@ int zfcp_fsf_exchange_config_data(struct
-       int retval = -EIO;
-       spin_lock_bh(&adapter->req_q.lock);
--      if (!atomic_read(&adapter->req_q.count))
-+      if (!zfcp_fsf_sbal_available(adapter))
-               goto out;
-       req = zfcp_fsf_req_create(adapter,
-                                 FSF_QTCB_EXCHANGE_CONFIG_DATA,
-@@ -1362,7 +1372,7 @@ int zfcp_fsf_exchange_port_data(struct z
-               return -EOPNOTSUPP;
-       spin_lock_bh(&adapter->req_q.lock);
--      if (!atomic_read(&adapter->req_q.count))
-+      if (!zfcp_fsf_sbal_available(adapter))
-               goto out;
-       req = zfcp_fsf_req_create(adapter, FSF_QTCB_EXCHANGE_PORT_DATA,
-                                 ZFCP_REQ_AUTO_CLEANUP,
-@@ -1408,7 +1418,7 @@ int zfcp_fsf_exchange_port_data_sync(str
-               return -EOPNOTSUPP;
-       spin_lock_bh(&adapter->req_q.lock);
--      if (!atomic_read(&adapter->req_q.count))
-+      if (!zfcp_fsf_sbal_available(adapter))
-               goto out;
-       req = zfcp_fsf_req_create(adapter, FSF_QTCB_EXCHANGE_PORT_DATA, 0,
-@@ -2258,7 +2268,7 @@ int zfcp_fsf_send_fcp_command_task(struc
-               return -EBUSY;
-       spin_lock(&adapter->req_q.lock);
--      if (!atomic_read(&adapter->req_q.count))
-+      if (!zfcp_fsf_sbal_available(adapter))
-               goto out;
-       req = zfcp_fsf_req_create(adapter, FSF_QTCB_FCP_CMND, req_flags,
-                                 adapter->pool.fsf_req_scsi);
-@@ -2381,7 +2391,7 @@ struct zfcp_fsf_req *zfcp_fsf_send_fcp_c
-               return NULL;
-       spin_lock(&adapter->req_q.lock);
--      if (!atomic_read(&adapter->req_q.count))
-+      if (!zfcp_fsf_sbal_available(adapter))
-               goto out;
-       req = zfcp_fsf_req_create(adapter, FSF_QTCB_FCP_CMND, req_flags,
-                                 adapter->pool.fsf_req_scsi);
---- a/drivers/s390/scsi/zfcp_qdio.c
-+++ b/drivers/s390/scsi/zfcp_qdio.c
-@@ -283,6 +283,7 @@ static int zfcp_qdio_fill_sbals(struct z
-            addr += length, remaining -= length) {
-               sbale = zfcp_qdio_sbale_next(fsf_req, sbtype);
-               if (!sbale) {
-+                      atomic_inc(&fsf_req->adapter->qdio_outb_full);
-                       zfcp_qdio_undo_sbals(fsf_req);
-                       return -EINVAL;
-               }
---- a/drivers/s390/scsi/zfcp_sysfs.c
-+++ b/drivers/s390/scsi/zfcp_sysfs.c
-@@ -487,10 +487,23 @@ ZFCP_SHOST_ATTR(megabytes, "%llu %llu\n"
- ZFCP_SHOST_ATTR(seconds_active, "%llu\n",
-               (unsigned long long) stat_info.seconds_act);
-+static ssize_t zfcp_sysfs_adapter_q_full_show(struct device *dev,
-+                                            struct device_attribute *attr,
-+                                            char *buf)
-+{
-+      struct Scsi_Host *scsi_host = class_to_shost(dev);
-+      struct zfcp_adapter *adapter =
-+              (struct zfcp_adapter *) scsi_host->hostdata[0];
-+
-+      return sprintf(buf, "%d\n", atomic_read(&adapter->qdio_outb_full));
-+}
-+static DEVICE_ATTR(queue_full, S_IRUGO, zfcp_sysfs_adapter_q_full_show, NULL);
-+
- struct device_attribute *zfcp_sysfs_shost_attrs[] = {
-       &dev_attr_utilization,
-       &dev_attr_requests,
-       &dev_attr_megabytes,
-       &dev_attr_seconds_active,
-+      &dev_attr_queue_full,
-       NULL
- };