[SCSI] zfcp: Access ports and units with container_of in sysfs code
Christof Schmitt [Tue, 24 Nov 2009 15:54:02 +0000 (16:54 +0100)]
When accessing port and unit attributes, use container_of instead of
dev_get_drvdata. This eliminates some code checker warnings about
aliased access of data structures.

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@suse.de>

drivers/s390/scsi/zfcp_aux.c
drivers/s390/scsi/zfcp_sysfs.c

index ed31bd0..baef2ec 100644 (file)
@@ -319,7 +319,6 @@ struct zfcp_unit *zfcp_unit_enqueue(struct zfcp_port *port, u64 fcp_lun)
                kfree(unit);
                goto err_out;
        }
-       dev_set_drvdata(&unit->sysfs_device, unit);
        retval = -EINVAL;
 
        /* mark unit unusable as long as sysfs registration is not complete */
@@ -688,7 +687,6 @@ struct zfcp_port *zfcp_port_enqueue(struct zfcp_adapter *adapter, u64 wwpn,
                kfree(port);
                goto err_out;
        }
-       dev_set_drvdata(&port->sysfs_device, port);
        retval = -EINVAL;
 
        if (device_register(&port->sysfs_device)) {
index 181bea0..901cc9a 100644 (file)
@@ -19,7 +19,8 @@ static ssize_t zfcp_sysfs_##_feat##_##_name##_show(struct device *dev,               \
                                                   struct device_attribute *at,\
                                                   char *buf)                  \
 {                                                                             \
-       struct _feat_def *_feat = dev_get_drvdata(dev);                        \
+       struct _feat_def *_feat = container_of(dev, struct _feat_def,          \
+                                              sysfs_device);                  \
                                                                               \
        return sprintf(buf, _format, _value);                                  \
 }                                                                             \
@@ -86,7 +87,8 @@ static ssize_t zfcp_sysfs_##_feat##_failed_show(struct device *dev,          \
                                                struct device_attribute *attr, \
                                                char *buf)                     \
 {                                                                             \
-       struct _feat_def *_feat = dev_get_drvdata(dev);                        \
+       struct _feat_def *_feat = container_of(dev, struct _feat_def,          \
+                                              sysfs_device);                  \
                                                                               \
        if (atomic_read(&_feat->status) & ZFCP_STATUS_COMMON_ERP_FAILED)       \
                return sprintf(buf, "1\n");                                    \
@@ -97,7 +99,8 @@ static ssize_t zfcp_sysfs_##_feat##_failed_store(struct device *dev,         \
                                                 struct device_attribute *attr,\
                                                 const char *buf, size_t count)\
 {                                                                             \
-       struct _feat_def *_feat = dev_get_drvdata(dev);                        \
+       struct _feat_def *_feat = container_of(dev, struct _feat_def,          \
+                                              sysfs_device);                  \
        unsigned long val;                                                     \
        int retval = 0;                                                        \
                                                                               \
@@ -274,7 +277,8 @@ static ssize_t zfcp_sysfs_unit_add_store(struct device *dev,
                                         struct device_attribute *attr,
                                         const char *buf, size_t count)
 {
-       struct zfcp_port *port = dev_get_drvdata(dev);
+       struct zfcp_port *port = container_of(dev, struct zfcp_port,
+                                             sysfs_device);
        struct zfcp_unit *unit;
        u64 fcp_lun;
        int retval = -EINVAL;
@@ -305,7 +309,8 @@ static ssize_t zfcp_sysfs_unit_remove_store(struct device *dev,
                                            struct device_attribute *attr,
                                            const char *buf, size_t count)
 {
-       struct zfcp_port *port = dev_get_drvdata(dev);
+       struct zfcp_port *port = container_of(dev, struct zfcp_port,
+                                             sysfs_device);
        struct zfcp_unit *unit;
        u64 fcp_lun;
        int retval = 0;