Messages in this thread Patch in this message | | | Date | Fri, 15 Sep 2006 13:20:28 +0200 | From | Cornelia Huck <> | Subject | Re: [01/12] driver core fixes: make_class_name() retval check |
| |
On Thu, 14 Sep 2006 14:01:33 +0200, Martin Waitz <tali@admingilde.org> wrote:
> perhaps it makes sense to return NULL in make_class_name on error, > to have consistent error return values?
It should make the code a bit nicer, I think. But I'm not sure if it's worth the hassle (config_sysfs_deprecated.patch moves make_class_name() under CONFIG_SYSFS_DEPRECATED).
Anyway, here is a patch against the latest version of Greg's tree:
From: Cornelia Huck <cornelia.huck@de.ibm.com>
Make make_class_name() return NULL on error and fixup callers in the driver core.
Signed-off-by: Cornelia Huck <cornelia.huck@de.ibm.com>
class.c | 12 ++++++++---- core.c | 7 +++++-- 2 files changed, 13 insertions(+), 6 deletions(-)
diff -Naurp linux-2.6.18-rc7/drivers/base/class.c linux-2.6.18-rc7+CH/drivers/base/class.c --- linux-2.6.18-rc7/drivers/base/class.c 2006-09-15 10:38:55.000000000 +0200 +++ linux-2.6.18-rc7+CH/drivers/base/class.c 2006-09-15 12:18:30.000000000 +0200 @@ -360,7 +360,7 @@ char *make_class_name(const char *name, class_name = kmalloc(size, GFP_KERNEL); if (!class_name) - return ERR_PTR(-ENOMEM); + return NULL; strcpy(class_name, name); strcat(class_name, ":"); @@ -407,8 +407,11 @@ static int make_deprecated_class_device_ return 0; class_name = make_class_name(class_dev->class->name, &class_dev->kobj); - error = sysfs_create_link(&class_dev->dev->kobj, &class_dev->kobj, - class_name); + if (!class_name) + error = sysfs_create_link(&class_dev->dev->kobj, + &class_dev->kobj, class_name); + else + error = -ENOMEM; kfree(class_name); return error; } @@ -769,7 +772,8 @@ void class_device_del(struct class_devic #ifdef CONFIG_SYSFS_DEPRECATED class_name = make_class_name(class_dev->class->name, &class_dev->kobj); - sysfs_remove_link(&class_dev->dev->kobj, class_name); + if (class_name) + sysfs_remove_link(&class_dev->dev->kobj, class_name); #endif sysfs_remove_link(&class_dev->kobj, "device"); } diff -Naurp linux-2.6.18-rc7/drivers/base/core.c linux-2.6.18-rc7+CH/drivers/base/core.c --- linux-2.6.18-rc7/drivers/base/core.c 2006-09-15 10:39:03.000000000 +0200 +++ linux-2.6.18-rc7+CH/drivers/base/core.c 2006-09-15 11:01:58.000000000 +0200 @@ -443,7 +443,9 @@ int device_add(struct device *dev) if ((parent) && (!device_is_virtual(dev))) { sysfs_create_link(&dev->kobj, &dev->parent->kobj, "device"); class_name = make_class_name(dev->class->name, &dev->kobj); - sysfs_create_link(&dev->parent->kobj, &dev->kobj, class_name); + if (class_name) + sysfs_create_link(&dev->parent->kobj, + &dev->kobj, class_name); } #endif } @@ -574,7 +576,8 @@ void device_del(struct device * dev) char *class_name = NULL; class_name = make_class_name(dev->class->name, &dev->kobj); - sysfs_remove_link(&dev->parent->kobj, class_name); + if (class_name) + sysfs_remove_link(&dev->parent->kobj, class_name); kfree(class_name); #endif sysfs_remove_link(&dev->kobj, "device"); - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |