[SCSI] zfcp: cleanup port sysfs attribute usage
authorSebastian Ott <sebott@linux.vnet.ibm.com>
Fri, 26 Apr 2013 14:13:48 +0000 (16:13 +0200)
committerJames Bottomley <JBottomley@Parallels.com>
Fri, 31 May 2013 23:32:36 +0000 (16:32 -0700)
Let the driver core handle device attribute creation and removal. This
will simplify the code and eliminates races between attribute
availability and userspace notification via uevents.

Reviewed-by: Steffen Maier <maier@linux.vnet.ibm.com>
Signed-off-by: Sebastian Ott <sebott@linux.vnet.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Signed-off-by: Steffen Maier <maier@linux.vnet.ibm.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
drivers/s390/scsi/zfcp_aux.c
drivers/s390/scsi/zfcp_ccw.c
drivers/s390/scsi/zfcp_ext.h
drivers/s390/scsi/zfcp_fc.c
drivers/s390/scsi/zfcp_sysfs.c

index f6adde44f226e1352c327a3b27696f09f7a7b501..aa2aee64e60bbf5855380b399be296d01468afe8 100644 (file)
@@ -530,6 +530,7 @@ struct zfcp_port *zfcp_port_enqueue(struct zfcp_adapter *adapter, u64 wwpn,
        port->wwpn = wwpn;
        port->rport_task = RPORT_NONE;
        port->dev.parent = &adapter->ccw_device->dev;
+       port->dev.groups = zfcp_port_attr_groups;
        port->dev.release = zfcp_port_release;
 
        if (dev_set_name(&port->dev, "0x%016llx", (unsigned long long)wwpn)) {
@@ -543,10 +544,6 @@ struct zfcp_port *zfcp_port_enqueue(struct zfcp_adapter *adapter, u64 wwpn,
                goto err_out;
        }
 
-       if (sysfs_create_group(&port->dev.kobj,
-                              &zfcp_sysfs_port_attrs))
-               goto err_out_put;
-
        write_lock_irq(&adapter->port_list_lock);
        list_add_tail(&port->list, &adapter->port_list);
        write_unlock_irq(&adapter->port_list_lock);
@@ -555,8 +552,6 @@ struct zfcp_port *zfcp_port_enqueue(struct zfcp_adapter *adapter, u64 wwpn,
 
        return port;
 
-err_out_put:
-       device_unregister(&port->dev);
 err_out:
        zfcp_ccw_adapter_put(adapter);
        return ERR_PTR(retval);
index f2dd3a0a39eb04e421437f4eaef1b6d1d1f1f82f..202f39572880f425124214555b8c569922a0ffa6 100644 (file)
@@ -132,7 +132,7 @@ static void zfcp_ccw_remove(struct ccw_device *cdev)
                zfcp_device_unregister(&unit->dev, &zfcp_sysfs_unit_attrs);
 
        list_for_each_entry_safe(port, p, &port_remove_lh, list)
-               zfcp_device_unregister(&port->dev, &zfcp_sysfs_port_attrs);
+               device_unregister(&port->dev);
 
        zfcp_adapter_unregister(adapter);
 }
index 1d3dd3f7d69994163c2dd1d860a7a6584c21f5d5..695b133364a8200615e9a5079594076f8ea7ec3d 100644 (file)
@@ -160,7 +160,7 @@ extern void zfcp_scsi_dif_sense_error(struct scsi_cmnd *, int);
 /* zfcp_sysfs.c */
 extern struct attribute_group zfcp_sysfs_unit_attrs;
 extern struct attribute_group zfcp_sysfs_adapter_attrs;
-extern struct attribute_group zfcp_sysfs_port_attrs;
+extern const struct attribute_group *zfcp_port_attr_groups[];
 extern struct mutex zfcp_sysfs_port_units_mutex;
 extern struct device_attribute *zfcp_sysfs_sdev_attrs[];
 extern struct device_attribute *zfcp_sysfs_shost_attrs[];
index ff598cd68b2d0bde11c99c412ca0ea70a90d6ece..ca28e1c6611588a87ba0bd3272c36be6577f7875 100644 (file)
@@ -668,7 +668,7 @@ static int zfcp_fc_eval_gpn_ft(struct zfcp_fc_req *fc_req,
 
        list_for_each_entry_safe(port, tmp, &remove_lh, list) {
                zfcp_erp_port_shutdown(port, 0, "fcegpf2");
-               zfcp_device_unregister(&port->dev, &zfcp_sysfs_port_attrs);
+               device_unregister(&port->dev);
        }
 
        return ret;
index 1e0eb089dfbafd620e430c2357497284acf5349a..d9261264a2b6e9b78b1f7c0181c075dc228453c5 100644 (file)
@@ -268,7 +268,7 @@ static ssize_t zfcp_sysfs_port_remove_store(struct device *dev,
        put_device(&port->dev);
 
        zfcp_erp_port_shutdown(port, 0, "syprs_1");
-       zfcp_device_unregister(&port->dev, &zfcp_sysfs_port_attrs);
+       device_unregister(&port->dev);
  out:
        zfcp_ccw_adapter_put(adapter);
        return retval ? retval : (ssize_t) count;
@@ -340,13 +340,13 @@ static struct attribute *zfcp_port_attrs[] = {
        &dev_attr_port_access_denied.attr,
        NULL
 };
-
-/**
- * zfcp_sysfs_port_attrs - sysfs attributes for all other ports
- */
-struct attribute_group zfcp_sysfs_port_attrs = {
+static struct attribute_group zfcp_port_attr_group = {
        .attrs = zfcp_port_attrs,
 };
+const struct attribute_group *zfcp_port_attr_groups[] = {
+       &zfcp_port_attr_group,
+       NULL,
+};
 
 static struct attribute *zfcp_unit_attrs[] = {
        &dev_attr_unit_failed.attr,