Commit 83d4e1c3 authored by Sebastian Ott's avatar Sebastian Ott Committed by James Bottomley

[SCSI] zfcp: cleanup port sysfs attribute usage

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: default avatarSteffen Maier <maier@linux.vnet.ibm.com>
Signed-off-by: default avatarSebastian Ott <sebott@linux.vnet.ibm.com>
Signed-off-by: default avatarMartin Schwidefsky <schwidefsky@de.ibm.com>
Signed-off-by: default avatarSteffen Maier <maier@linux.vnet.ibm.com>
Signed-off-by: default avatarJames Bottomley <JBottomley@Parallels.com>
parent 8377dbc3
...@@ -530,6 +530,7 @@ struct zfcp_port *zfcp_port_enqueue(struct zfcp_adapter *adapter, u64 wwpn, ...@@ -530,6 +530,7 @@ struct zfcp_port *zfcp_port_enqueue(struct zfcp_adapter *adapter, u64 wwpn,
port->wwpn = wwpn; port->wwpn = wwpn;
port->rport_task = RPORT_NONE; port->rport_task = RPORT_NONE;
port->dev.parent = &adapter->ccw_device->dev; port->dev.parent = &adapter->ccw_device->dev;
port->dev.groups = zfcp_port_attr_groups;
port->dev.release = zfcp_port_release; port->dev.release = zfcp_port_release;
if (dev_set_name(&port->dev, "0x%016llx", (unsigned long long)wwpn)) { 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, ...@@ -543,10 +544,6 @@ struct zfcp_port *zfcp_port_enqueue(struct zfcp_adapter *adapter, u64 wwpn,
goto err_out; 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); write_lock_irq(&adapter->port_list_lock);
list_add_tail(&port->list, &adapter->port_list); list_add_tail(&port->list, &adapter->port_list);
write_unlock_irq(&adapter->port_list_lock); write_unlock_irq(&adapter->port_list_lock);
...@@ -555,8 +552,6 @@ struct zfcp_port *zfcp_port_enqueue(struct zfcp_adapter *adapter, u64 wwpn, ...@@ -555,8 +552,6 @@ struct zfcp_port *zfcp_port_enqueue(struct zfcp_adapter *adapter, u64 wwpn,
return port; return port;
err_out_put:
device_unregister(&port->dev);
err_out: err_out:
zfcp_ccw_adapter_put(adapter); zfcp_ccw_adapter_put(adapter);
return ERR_PTR(retval); return ERR_PTR(retval);
......
...@@ -132,7 +132,7 @@ static void zfcp_ccw_remove(struct ccw_device *cdev) ...@@ -132,7 +132,7 @@ static void zfcp_ccw_remove(struct ccw_device *cdev)
zfcp_device_unregister(&unit->dev, &zfcp_sysfs_unit_attrs); zfcp_device_unregister(&unit->dev, &zfcp_sysfs_unit_attrs);
list_for_each_entry_safe(port, p, &port_remove_lh, list) 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); zfcp_adapter_unregister(adapter);
} }
......
...@@ -160,7 +160,7 @@ extern void zfcp_scsi_dif_sense_error(struct scsi_cmnd *, int); ...@@ -160,7 +160,7 @@ extern void zfcp_scsi_dif_sense_error(struct scsi_cmnd *, int);
/* zfcp_sysfs.c */ /* zfcp_sysfs.c */
extern struct attribute_group zfcp_sysfs_unit_attrs; extern struct attribute_group zfcp_sysfs_unit_attrs;
extern struct attribute_group zfcp_sysfs_adapter_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 mutex zfcp_sysfs_port_units_mutex;
extern struct device_attribute *zfcp_sysfs_sdev_attrs[]; extern struct device_attribute *zfcp_sysfs_sdev_attrs[];
extern struct device_attribute *zfcp_sysfs_shost_attrs[]; extern struct device_attribute *zfcp_sysfs_shost_attrs[];
......
...@@ -668,7 +668,7 @@ static int zfcp_fc_eval_gpn_ft(struct zfcp_fc_req *fc_req, ...@@ -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) { list_for_each_entry_safe(port, tmp, &remove_lh, list) {
zfcp_erp_port_shutdown(port, 0, "fcegpf2"); zfcp_erp_port_shutdown(port, 0, "fcegpf2");
zfcp_device_unregister(&port->dev, &zfcp_sysfs_port_attrs); device_unregister(&port->dev);
} }
return ret; return ret;
......
...@@ -268,7 +268,7 @@ static ssize_t zfcp_sysfs_port_remove_store(struct device *dev, ...@@ -268,7 +268,7 @@ static ssize_t zfcp_sysfs_port_remove_store(struct device *dev,
put_device(&port->dev); put_device(&port->dev);
zfcp_erp_port_shutdown(port, 0, "syprs_1"); zfcp_erp_port_shutdown(port, 0, "syprs_1");
zfcp_device_unregister(&port->dev, &zfcp_sysfs_port_attrs); device_unregister(&port->dev);
out: out:
zfcp_ccw_adapter_put(adapter); zfcp_ccw_adapter_put(adapter);
return retval ? retval : (ssize_t) count; return retval ? retval : (ssize_t) count;
...@@ -340,13 +340,13 @@ static struct attribute *zfcp_port_attrs[] = { ...@@ -340,13 +340,13 @@ static struct attribute *zfcp_port_attrs[] = {
&dev_attr_port_access_denied.attr, &dev_attr_port_access_denied.attr,
NULL NULL
}; };
static struct attribute_group zfcp_port_attr_group = {
/**
* zfcp_sysfs_port_attrs - sysfs attributes for all other ports
*/
struct attribute_group zfcp_sysfs_port_attrs = {
.attrs = zfcp_port_attrs, .attrs = zfcp_port_attrs,
}; };
const struct attribute_group *zfcp_port_attr_groups[] = {
&zfcp_port_attr_group,
NULL,
};
static struct attribute *zfcp_unit_attrs[] = { static struct attribute *zfcp_unit_attrs[] = {
&dev_attr_unit_failed.attr, &dev_attr_unit_failed.attr,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment