aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/s390
diff options
context:
space:
mode:
authorSebastian Ott <sebott@linux.vnet.ibm.com>2013-04-26 10:13:48 -0400
committerJames Bottomley <JBottomley@Parallels.com>2013-05-31 19:32:36 -0400
commit83d4e1c33d9329e6d53cf4ac0a02c98ac83eba05 (patch)
treea2c696af985b939f687c660ef65d15e6e655181b /drivers/s390
parent8377dbc3cd376070145061212283c9e4a5afeb09 (diff)
[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: 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>
Diffstat (limited to 'drivers/s390')
-rw-r--r--drivers/s390/scsi/zfcp_aux.c7
-rw-r--r--drivers/s390/scsi/zfcp_ccw.c2
-rw-r--r--drivers/s390/scsi/zfcp_ext.h2
-rw-r--r--drivers/s390/scsi/zfcp_fc.c2
-rw-r--r--drivers/s390/scsi/zfcp_sysfs.c12
5 files changed, 10 insertions, 15 deletions
diff --git a/drivers/s390/scsi/zfcp_aux.c b/drivers/s390/scsi/zfcp_aux.c
index f6adde44f226..aa2aee64e60b 100644
--- a/drivers/s390/scsi/zfcp_aux.c
+++ b/drivers/s390/scsi/zfcp_aux.c
@@ -530,6 +530,7 @@ struct zfcp_port *zfcp_port_enqueue(struct zfcp_adapter *adapter, u64 wwpn,
530 port->wwpn = wwpn; 530 port->wwpn = wwpn;
531 port->rport_task = RPORT_NONE; 531 port->rport_task = RPORT_NONE;
532 port->dev.parent = &adapter->ccw_device->dev; 532 port->dev.parent = &adapter->ccw_device->dev;
533 port->dev.groups = zfcp_port_attr_groups;
533 port->dev.release = zfcp_port_release; 534 port->dev.release = zfcp_port_release;
534 535
535 if (dev_set_name(&port->dev, "0x%016llx", (unsigned long long)wwpn)) { 536 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 goto err_out; 544 goto err_out;
544 } 545 }
545 546
546 if (sysfs_create_group(&port->dev.kobj,
547 &zfcp_sysfs_port_attrs))
548 goto err_out_put;
549
550 write_lock_irq(&adapter->port_list_lock); 547 write_lock_irq(&adapter->port_list_lock);
551 list_add_tail(&port->list, &adapter->port_list); 548 list_add_tail(&port->list, &adapter->port_list);
552 write_unlock_irq(&adapter->port_list_lock); 549 write_unlock_irq(&adapter->port_list_lock);
@@ -555,8 +552,6 @@ struct zfcp_port *zfcp_port_enqueue(struct zfcp_adapter *adapter, u64 wwpn,
555 552
556 return port; 553 return port;
557 554
558err_out_put:
559 device_unregister(&port->dev);
560err_out: 555err_out:
561 zfcp_ccw_adapter_put(adapter); 556 zfcp_ccw_adapter_put(adapter);
562 return ERR_PTR(retval); 557 return ERR_PTR(retval);
diff --git a/drivers/s390/scsi/zfcp_ccw.c b/drivers/s390/scsi/zfcp_ccw.c
index f2dd3a0a39eb..202f39572880 100644
--- a/drivers/s390/scsi/zfcp_ccw.c
+++ b/drivers/s390/scsi/zfcp_ccw.c
@@ -132,7 +132,7 @@ static void zfcp_ccw_remove(struct ccw_device *cdev)
132 zfcp_device_unregister(&unit->dev, &zfcp_sysfs_unit_attrs); 132 zfcp_device_unregister(&unit->dev, &zfcp_sysfs_unit_attrs);
133 133
134 list_for_each_entry_safe(port, p, &port_remove_lh, list) 134 list_for_each_entry_safe(port, p, &port_remove_lh, list)
135 zfcp_device_unregister(&port->dev, &zfcp_sysfs_port_attrs); 135 device_unregister(&port->dev);
136 136
137 zfcp_adapter_unregister(adapter); 137 zfcp_adapter_unregister(adapter);
138} 138}
diff --git a/drivers/s390/scsi/zfcp_ext.h b/drivers/s390/scsi/zfcp_ext.h
index 1d3dd3f7d699..695b133364a8 100644
--- a/drivers/s390/scsi/zfcp_ext.h
+++ b/drivers/s390/scsi/zfcp_ext.h
@@ -160,7 +160,7 @@ extern void zfcp_scsi_dif_sense_error(struct scsi_cmnd *, int);
160/* zfcp_sysfs.c */ 160/* zfcp_sysfs.c */
161extern struct attribute_group zfcp_sysfs_unit_attrs; 161extern struct attribute_group zfcp_sysfs_unit_attrs;
162extern struct attribute_group zfcp_sysfs_adapter_attrs; 162extern struct attribute_group zfcp_sysfs_adapter_attrs;
163extern struct attribute_group zfcp_sysfs_port_attrs; 163extern const struct attribute_group *zfcp_port_attr_groups[];
164extern struct mutex zfcp_sysfs_port_units_mutex; 164extern struct mutex zfcp_sysfs_port_units_mutex;
165extern struct device_attribute *zfcp_sysfs_sdev_attrs[]; 165extern struct device_attribute *zfcp_sysfs_sdev_attrs[];
166extern struct device_attribute *zfcp_sysfs_shost_attrs[]; 166extern struct device_attribute *zfcp_sysfs_shost_attrs[];
diff --git a/drivers/s390/scsi/zfcp_fc.c b/drivers/s390/scsi/zfcp_fc.c
index ff598cd68b2d..ca28e1c66115 100644
--- a/drivers/s390/scsi/zfcp_fc.c
+++ b/drivers/s390/scsi/zfcp_fc.c
@@ -668,7 +668,7 @@ static int zfcp_fc_eval_gpn_ft(struct zfcp_fc_req *fc_req,
668 668
669 list_for_each_entry_safe(port, tmp, &remove_lh, list) { 669 list_for_each_entry_safe(port, tmp, &remove_lh, list) {
670 zfcp_erp_port_shutdown(port, 0, "fcegpf2"); 670 zfcp_erp_port_shutdown(port, 0, "fcegpf2");
671 zfcp_device_unregister(&port->dev, &zfcp_sysfs_port_attrs); 671 device_unregister(&port->dev);
672 } 672 }
673 673
674 return ret; 674 return ret;
diff --git a/drivers/s390/scsi/zfcp_sysfs.c b/drivers/s390/scsi/zfcp_sysfs.c
index 1e0eb089dfba..d9261264a2b6 100644
--- a/drivers/s390/scsi/zfcp_sysfs.c
+++ b/drivers/s390/scsi/zfcp_sysfs.c
@@ -268,7 +268,7 @@ static ssize_t zfcp_sysfs_port_remove_store(struct device *dev,
268 put_device(&port->dev); 268 put_device(&port->dev);
269 269
270 zfcp_erp_port_shutdown(port, 0, "syprs_1"); 270 zfcp_erp_port_shutdown(port, 0, "syprs_1");
271 zfcp_device_unregister(&port->dev, &zfcp_sysfs_port_attrs); 271 device_unregister(&port->dev);
272 out: 272 out:
273 zfcp_ccw_adapter_put(adapter); 273 zfcp_ccw_adapter_put(adapter);
274 return retval ? retval : (ssize_t) count; 274 return retval ? retval : (ssize_t) count;
@@ -340,13 +340,13 @@ static struct attribute *zfcp_port_attrs[] = {
340 &dev_attr_port_access_denied.attr, 340 &dev_attr_port_access_denied.attr,
341 NULL 341 NULL
342}; 342};
343 343static struct attribute_group zfcp_port_attr_group = {
344/**
345 * zfcp_sysfs_port_attrs - sysfs attributes for all other ports
346 */
347struct attribute_group zfcp_sysfs_port_attrs = {
348 .attrs = zfcp_port_attrs, 344 .attrs = zfcp_port_attrs,
349}; 345};
346const struct attribute_group *zfcp_port_attr_groups[] = {
347 &zfcp_port_attr_group,
348 NULL,
349};
350 350
351static struct attribute *zfcp_unit_attrs[] = { 351static struct attribute *zfcp_unit_attrs[] = {
352 &dev_attr_unit_failed.attr, 352 &dev_attr_unit_failed.attr,