s390: sysfs_create_xxx return values.
Subsystems (3)
PATCH 6/6 s390: sysfs_create_xxx return values.
From: Heiko Carstens <[email protected]>
[S390] sysfs_create_xxx return values.
Take return values of sysfs_create_group & friends into account.
Signed-off-by Heiko Carstens <[email protected]>
Signed-off-by Martin Schwidefsky <[email protected]>
---
arch/s390/kernel/setup.c | 46 ++++++++++++++++++++++++++++-------- drivers/s390/char/raw3270.c | 52 +++++++++++++++++++++++++++-------------- drivers/s390/char/tape_class.c | 10 +++++++ drivers/s390/char/tape_core.c | 18 ++++++++------ drivers/s390/net/ctcmain.c | 21 +++++++++++++--- drivers/s390/net/qeth_main.c | 7 +++-- 6 files changed, 112 insertions(+), 42 deletions(-)
arch/s390/kernel/setup.c +36 -10
@@ -877,31 +877,57 @@ static struct bin_attribute ipl_scp_data static decl_subsys(ipl, NULL, NULL); +static int ipl_register_fcp_files (void ) +{ +int rc; + + rc =sysfs_create_group (&ipl_subsys.kset.kobj, + &ipl_fcp_attr_group); +if (rc) + goto out; + rc =sysfs_create_bin_file (&ipl_subsys.kset.kobj, + &ipl_parameter_attr); +if (rc) + goto out_ipl_parm; + rc =sysfs_create_bin_file (&ipl_subsys.kset.kobj, + &ipl_scp_data_attr); +if (!rc) + goto out; + +sysfs_remove_bin_file (&ipl_subsys.kset.kobj, &ipl_parameter_attr); + +out_ipl_parm: +sysfs_remove_group (&ipl_subsys.kset.kobj, &ipl_fcp_attr_group); +out: +return rc; +} +static int __init ipl_device_sysfs_register (void ) {int rc; rc =firmware_register (&ipl_subsys);if (rc) -return rc; + goto out;switch (get_ipl_type ()) {case ipl_type_ccw: -sysfs_create_group (&ipl_subsys.kset.kobj, &ipl_ccw_attr_group); + rc =sysfs_create_group (&ipl_subsys.kset.kobj, + &ipl_ccw_attr_group);break ;case ipl_type_fcp: -sysfs_create_group (&ipl_subsys.kset.kobj, &ipl_fcp_attr_group); -sysfs_create_bin_file (&ipl_subsys.kset.kobj, - &ipl_parameter_attr); -sysfs_create_bin_file (&ipl_subsys.kset.kobj, - &ipl_scp_data_attr); + rc =ipl_register_fcp_files ();break ;default : -sysfs_create_group (&ipl_subsys.kset.kobj, - &ipl_unknown_attr_group); + rc =sysfs_create_group (&ipl_subsys.kset.kobj, + &ipl_unknown_attr_group);break ; } -return 0 ; + +if (rc) +firmware_unregister (&ipl_subsys); +out: +return rc; }__initcall (ipl_device_sysfs_register);
drivers/s390/char/raw3270.c +35 -17
73 lines not on this page · raw message
drivers/s390/char/tape_class.c +9 -1
@@ -76,14 +76,22 @@ struct tape_class_device *register_tape_ device,"%s" , tcd->device_name ); -sysfs_create_link ( + rc =PTR_ERR (tcd->class_device); +if (rc) + goto fail_with_cdev; + rc =sysfs_create_link ( &device->kobj, &tcd->class_device->kobj, tcd->mode_name ); +if (rc) + goto fail_with_class_device;return tcd; +fail_with_class_device: +class_device_destroy (tape_class, tcd->char_device->dev); + fail_with_cdev:cdev_del (tcd->char_device);
drivers/s390/char/tape_core.c +11 -7
@@ -543,20 +543,24 @@ int tape_generic_probe(struct ccw_device *cdev) {struct tape_device *device; +int ret; device =tape_alloc_device ();if (IS_ERR (device))return -ENODEV ; -PRINT_INFO ("tape device %s found\n" , cdev->dev.bus_id); +ccw_device_set_options (cdev,CCWDEV_DO_PATHGROUP ); + ret =sysfs_create_group (&cdev->dev.kobj, &tape_attr_group); +if (ret) { +tape_put_device (device); +PRINT_ERR ("probe failed for tape device %s\n" , cdev->dev.bus_id); +return ret; + } cdev->dev.driver_data = device; + cdev->handler = __tape_do_irq; device->cdev = cdev; device->cdev_id =busid_to_int (cdev->dev.bus_id); - cdev->handler = __tape_do_irq; - -ccw_device_set_options (cdev,CCWDEV_DO_PATHGROUP ); -sysfs_create_group (&cdev->dev.kobj, &tape_attr_group); - -return 0 ; +PRINT_INFO ("tape device %s found\n" , cdev->dev.bus_id); +return ret; } static inline void
drivers/s390/net/ctcmain.c +17 -4
@@ -2686,9 +2686,17 @@ static struct attribute_group ctc_attr_gstatic int ctc_add_attributes (struct device *dev) { -device_create_file (dev, &dev_attr_loglevel); -device_create_file (dev, &dev_attr_stats); -return 0 ; +int rc; + + rc =device_create_file (dev, &dev_attr_loglevel); +if (rc) + goto out; + rc =device_create_file (dev, &dev_attr_stats); +if (!rc) + goto out; +device_remove_file (dev, &dev_attr_loglevel); +out: +return rc; } static void
@@ -2901,7 +2909,12 @@ ctc_new_device(struct ccwgroup_device *c goto out; } -ctc_add_attributes (&cgdev->dev); +if (ctc_add_attributes (&cgdev->dev)) { +ctc_netdev_unregister (dev); + dev->priv =NULL ; +ctc_free_netdevice (dev,1 ); + goto out; + }strlcpy (privptr->fsm->name, dev->name,sizeof (privptr->fsm->name));
drivers/s390/net/qeth_main.c +4 -3
@@ -8451,10 +8451,11 @@ __qeth_reboot_event_card(struct device *static int qeth_reboot_event (struct notifier_block *this,unsigned long event,void *ptr) { +int ret; -driver_for_each_device (&qeth_ccwgroup_driver.driver,NULL ,NULL , - __qeth_reboot_event_card); -return NOTIFY_DONE ; + ret =driver_for_each_device (&qeth_ccwgroup_driver.driver,NULL ,NULL , + __qeth_reboot_event_card); +return ret ?NOTIFY_BAD :NOTIFY_DONE ; }