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;
                                        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;
        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);
                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);
        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,
                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,
                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,
                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);
                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);
 
 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
 };