This patch kills __must_check warnings for missing sysfs_create_link().
Signed-off-by: Akinobu Mita <[EMAIL PROTECTED]> Cc: Greg Kroah-Hartman <[EMAIL PROTECTED]> --- drivers/base/core.c | 59 +++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 45 insertions(+), 14 deletions(-) Index: 2.6-mm/drivers/base/core.c =================================================================== --- 2.6-mm.orig/drivers/base/core.c +++ 2.6-mm/drivers/base/core.c @@ -487,31 +487,61 @@ static int setup_parent(struct device *d return 0; } -static void device_add_links(struct device *dev, struct device *parent) +static int device_add_links(struct device *dev, struct device *parent) { + int err; + if (dev->class) { - sysfs_create_link(&dev->kobj, &dev->class->subsys.kset.kobj, - "subsystem"); + err = sysfs_create_link(&dev->kobj, + &dev->class->subsys.kset.kobj, + "subsystem"); + if (err) + return err; + /* If this is not a "fake" compatible device, then create the * symlink from the class to the device. */ - if (dev->kobj.parent != &dev->class->subsys.kset.kobj) - sysfs_create_link(&dev->class->subsys.kset.kobj, - &dev->kobj, dev->bus_id); + if (dev->kobj.parent != &dev->class->subsys.kset.kobj) { + err = sysfs_create_link(&dev->class->subsys.kset.kobj, + &dev->kobj, dev->bus_id); + if (err) + goto out1; + } #ifdef CONFIG_SYSFS_DEPRECATED if (parent) { char *class_name = NULL; - sysfs_create_link(&dev->kobj, &dev->parent->kobj, - "device"); + err = sysfs_create_link(&dev->kobj, &dev->parent->kobj, + "device"); + if (err) + goto out2; class_name = make_class_name(dev->class->name, &dev->kobj); - if (class_name) - sysfs_create_link(&dev->parent->kobj, - &dev->kobj, class_name); + if (class_name) { + err = sysfs_create_link(&dev->parent->kobj, + &dev->kobj, class_name); + if (err) { + kfree(class_name); + goto out3; + } + + } kfree(class_name); } #endif } + + return 0; + +#ifdef CONFIG_SYSFS_DEPRECATED +out3: + sysfs_remove_link(&dev->kobj, "device"); +out2: +#endif + sysfs_remove_link(&dev->class->subsys.kset.kobj, dev->bus_id); +out1: + sysfs_remove_link(&dev->kobj, "subsystem"); + + return err; } static void device_remove_links(struct device *dev, struct device *parent) @@ -611,8 +641,9 @@ int device_add(struct device *dev) dev->devt_attr = attr; } - device_add_links(dev, parent); - + error = device_add_links(dev, parent); + if (error) + goto LinksError; if ((error = device_add_attrs(dev))) goto AttrsError; if ((error = device_add_groups(dev))) @@ -652,7 +683,7 @@ int device_add(struct device *dev) device_remove_attrs(dev); AttrsError: device_remove_links(dev, parent); - + LinksError: if (dev->devt_attr) { device_remove_file(dev, dev->devt_attr); kfree(dev->devt_attr); - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/