[SCSI] zfcp: Acquire qdio_stat_lock when reading the queue utilization
authorChristof Schmitt <christof.schmitt@de.ibm.com>
Mon, 13 Jul 2009 13:06:03 +0000 (15:06 +0200)
committerJames Bottomley <James.Bottomley@HansenPartnership.com>
Thu, 30 Jul 2009 13:49:54 +0000 (08:49 -0500)
req_q_util is not atomic, so the qdio_stat_lock must be held when
reading this variable.

Reviewed-by: Swen Schillig <swen@vnet.ibm.com>
Signed-off-by: Christof Schmitt <christof.schmitt@de.ibm.com>
Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
drivers/s390/scsi/zfcp_sysfs.c

index 3e51e64..0fe5cce 100644 (file)
@@ -494,9 +494,14 @@ static ssize_t zfcp_sysfs_adapter_q_full_show(struct device *dev,
        struct Scsi_Host *scsi_host = class_to_shost(dev);
        struct zfcp_adapter *adapter =
                (struct zfcp_adapter *) scsi_host->hostdata[0];
+       u64 util;
+
+       spin_lock_bh(&adapter->qdio_stat_lock);
+       util = adapter->req_q_util;
+       spin_unlock_bh(&adapter->qdio_stat_lock);
 
        return sprintf(buf, "%d %llu\n", atomic_read(&adapter->qdio_outb_full),
-                      (unsigned long long)adapter->req_q_util);
+                      (unsigned long long)util);
 }
 static DEVICE_ATTR(queue_full, S_IRUGO, zfcp_sysfs_adapter_q_full_show, NULL);