Skip to content

Commit

Permalink
[S390] sysfs_create_xxx return values.
Browse files Browse the repository at this point in the history
Take return values of sysfs_create_group & friends into account.

Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
  • Loading branch information
Heiko Carstens authored and Martin Schwidefsky committed Jul 18, 2006
1 parent dc8f5d2 commit d7cf0d5
Show file tree
Hide file tree
Showing 6 changed files with 112 additions and 42 deletions.
46 changes: 36 additions & 10 deletions arch/s390/kernel/setup.c
Original file line number Diff line number Diff line change
Expand Up @@ -877,31 +877,57 @@ static struct bin_attribute ipl_scp_data_attr = {

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);
52 changes: 35 additions & 17 deletions drivers/s390/char/raw3270.c
Original file line number Diff line number Diff line change
Expand Up @@ -1106,10 +1106,10 @@ raw3270_delete_device(struct raw3270 *rp)

/* Remove from device chain. */
mutex_lock(&raw3270_mutex);
if (rp->clttydev)
if (rp->clttydev && !IS_ERR(rp->clttydev))
class_device_destroy(class3270,
MKDEV(IBM_TTY3270_MAJOR, rp->minor));
if (rp->cltubdev)
if (rp->cltubdev && !IS_ERR(rp->cltubdev))
class_device_destroy(class3270,
MKDEV(IBM_FS3270_MAJOR, rp->minor));
list_del_init(&rp->list);
Expand Down Expand Up @@ -1173,21 +1173,37 @@ static struct attribute_group raw3270_attr_group = {
.attrs = raw3270_attrs,
};

static void
raw3270_create_attributes(struct raw3270 *rp)
static int raw3270_create_attributes(struct raw3270 *rp)
{
//FIXME: check return code
sysfs_create_group(&rp->cdev->dev.kobj, &raw3270_attr_group);
rp->clttydev =
class_device_create(class3270, NULL,
MKDEV(IBM_TTY3270_MAJOR, rp->minor),
&rp->cdev->dev, "tty%s",
rp->cdev->dev.bus_id);
rp->cltubdev =
class_device_create(class3270, NULL,
MKDEV(IBM_FS3270_MAJOR, rp->minor),
&rp->cdev->dev, "tub%s",
rp->cdev->dev.bus_id);
int rc;

rc = sysfs_create_group(&rp->cdev->dev.kobj, &raw3270_attr_group);
if (rc)
goto out;

rp->clttydev = class_device_create(class3270, NULL,
MKDEV(IBM_TTY3270_MAJOR, rp->minor),
&rp->cdev->dev, "tty%s",
rp->cdev->dev.bus_id);
if (IS_ERR(rp->clttydev)) {
rc = PTR_ERR(rp->clttydev);
goto out_ttydev;
}

rp->cltubdev = class_device_create(class3270, NULL,
MKDEV(IBM_FS3270_MAJOR, rp->minor),
&rp->cdev->dev, "tub%s",
rp->cdev->dev.bus_id);
if (!IS_ERR(rp->cltubdev))
goto out;

rc = PTR_ERR(rp->cltubdev);
class_device_destroy(class3270, MKDEV(IBM_TTY3270_MAJOR, rp->minor));

out_ttydev:
sysfs_remove_group(&rp->cdev->dev.kobj, &raw3270_attr_group);
out:
return rc;
}

/*
Expand Down Expand Up @@ -1255,7 +1271,9 @@ raw3270_set_online (struct ccw_device *cdev)
rc = raw3270_reset_device(rp);
if (rc)
goto failure;
raw3270_create_attributes(rp);
rc = raw3270_create_attributes(rp);
if (rc)
goto failure;
set_bit(RAW3270_FLAGS_READY, &rp->flags);
mutex_lock(&raw3270_mutex);
list_for_each_entry(np, &raw3270_notifier, list)
Expand Down
10 changes: 9 additions & 1 deletion drivers/s390/char/tape_class.c
Original file line number Diff line number Diff line change
Expand Up @@ -76,14 +76,22 @@ struct tape_class_device *register_tape_dev(
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);

Expand Down
18 changes: 11 additions & 7 deletions drivers/s390/char/tape_core.c
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
21 changes: 17 additions & 4 deletions drivers/s390/net/ctcmain.c
Original file line number Diff line number Diff line change
Expand Up @@ -2686,9 +2686,17 @@ static struct attribute_group ctc_attr_group = {
static 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
Expand Down Expand Up @@ -2901,7 +2909,12 @@ ctc_new_device(struct ccwgroup_device *cgdev)
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));

Expand Down
7 changes: 4 additions & 3 deletions drivers/s390/net/qeth_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -8451,10 +8451,11 @@ __qeth_reboot_event_card(struct device *dev, void *data)
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;
}


Expand Down

0 comments on commit d7cf0d5

Please sign in to comment.