]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/commitdiff
Driver core: Fix cleanup when failing device_add().
authorCornelia Huck <cornelia.huck@de.ibm.com>
Wed, 27 Feb 2008 14:38:23 +0000 (15:38 +0100)
committerGreg Kroah-Hartman <gregkh@suse.de>
Tue, 4 Mar 2008 22:47:05 +0000 (14:47 -0800)
Driver core: Fix cleanup when failing device_add().

 - Don't call cleanup_device_parent() if we didn't call setup_parent().
 - dev->kobj.parent may be NULL when cleanup_device_parent() is called,
   so we need to handle glue_dir == NULL in cleanup_glue_dir().

Signed-off-by: Cornelia Huck <cornelia.huck@de.ibm.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/base/core.c

index 7f59c2f2ebcba6fd8236f32235a9e1c9df00c35b..7de543d1d0b4337328f95c502915d99b3a4fa871 100644 (file)
@@ -621,7 +621,8 @@ static struct kobject *get_device_parent(struct device *dev,
 static void cleanup_glue_dir(struct device *dev, struct kobject *glue_dir)
 {
        /* see if we live in a "glue" directory */
-       if (!dev->class || glue_dir->kset != &dev->class->class_dirs)
+       if (!glue_dir || !dev->class ||
+           glue_dir->kset != &dev->class->class_dirs)
                return;
 
        kobject_put(glue_dir);
@@ -773,7 +774,7 @@ int device_add(struct device *dev)
        dev = get_device(dev);
        if (!dev || !strlen(dev->bus_id)) {
                error = -EINVAL;
-               goto Error;
+               goto Done;
        }
 
        pr_debug("device: '%s': %s\n", dev->bus_id, __FUNCTION__);