* [patch 0/1] Late zfcp patch for 2.6.27
@ 2008-07-09 8:27 Christof Schmitt
2008-07-09 8:27 ` [patch 1/1] zfcp: add queue_full sysfs attribute Christof Schmitt
0 siblings, 1 reply; 2+ messages in thread
From: Christof Schmitt @ 2008-07-09 8:27 UTC (permalink / raw)
To: James Bottomley; +Cc: linux-scsi, linux-s390
James,
here is one more zfcp patch that i just received for 2.6.27. It
applies on top of the other zfcp patches for 2.6.27.
Christof
^ permalink raw reply [flat|nested] 2+ messages in thread
* [patch 1/1] zfcp: add queue_full sysfs attribute
2008-07-09 8:27 [patch 0/1] Late zfcp patch for 2.6.27 Christof Schmitt
@ 2008-07-09 8:27 ` Christof Schmitt
0 siblings, 0 replies; 2+ messages in thread
From: Christof Schmitt @ 2008-07-09 8:27 UTC (permalink / raw)
To: James Bottomley
Cc: linux-scsi, linux-s390, Stefan Raspl, Martin Peschke,
Christof Schmitt
[-- Attachment #1: queue_full_sysfs --]
[-- Type: text/plain, Size: 5300 bytes --]
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>
---
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 2008-07-09 10:14:49.000000000 +0200
+++ b/drivers/s390/scsi/zfcp_def.h 2008-07-09 10:16:03.000000000 +0200
@@ -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_qdio.c 2008-07-09 10:14:49.000000000 +0200
+++ b/drivers/s390/scsi/zfcp_qdio.c 2008-07-09 10:15:32.000000000 +0200
@@ -287,6 +287,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_fsf.c 2008-07-09 10:14:49.000000000 +0200
+++ b/drivers/s390/scsi/zfcp_fsf.c 2008-07-09 10:15:32.000000000 +0200
@@ -717,6 +717,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;
@@ -727,6 +735,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(&req_q->lock);
return -EIO;
@@ -984,7 +994,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);
@@ -1219,7 +1229,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);
@@ -1264,7 +1274,7 @@ int zfcp_fsf_exchange_config_data(struct
int retval = -EIO;
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_EXCHANGE_CONFIG_DATA,
@@ -1360,7 +1370,7 @@ int zfcp_fsf_exchange_port_data(struct z
return -EOPNOTSUPP;
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_EXCHANGE_PORT_DATA,
ZFCP_REQ_AUTO_CLEANUP,
@@ -1406,7 +1416,7 @@ int zfcp_fsf_exchange_port_data_sync(str
return -EOPNOTSUPP;
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_EXCHANGE_PORT_DATA, 0,
@@ -2224,7 +2234,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);
@@ -2347,7 +2357,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_sysfs.c 2008-07-09 10:14:49.000000000 +0200
+++ b/drivers/s390/scsi/zfcp_sysfs.c 2008-07-09 10:19:01.000000000 +0200
@@ -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
};
--
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2008-07-09 8:27 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-07-09 8:27 [patch 0/1] Late zfcp patch for 2.6.27 Christof Schmitt
2008-07-09 8:27 ` [patch 1/1] zfcp: add queue_full sysfs attribute Christof Schmitt
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox