kobject: get rid of kobject_kset_add_dir
authorGreg Kroah-Hartman <gregkh@suse.de>
Tue, 6 Nov 2007 06:24:43 +0000 (22:24 -0800)
committerGreg Kroah-Hartman <gregkh@suse.de>
Fri, 25 Jan 2008 04:40:11 +0000 (20:40 -0800)
kobject_kset_add_dir is only called in one place so remove it and use
kobject_create() instead.

Cc: Kay Sievers <kay.sievers@vrfy.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/base/core.c
include/linux/kobject.h
lib/kobject.c

index 992eba3289bdc6d0326468bbb3d93323ff5d223b..7762ee86697d3a450e51febbc3872506b17e4e4c 100644 (file)
@@ -571,6 +571,8 @@ static struct kobject *virtual_device_parent(struct device *dev)
 static struct kobject * get_device_parent(struct device *dev,
                                          struct device *parent)
 {
+       int retval;
+
        if (dev->class) {
                struct kobject *kobj = NULL;
                struct kobject *parent_kobj;
@@ -600,8 +602,18 @@ static struct kobject * get_device_parent(struct device *dev,
                        return kobj;
 
                /* or create a new class-directory at the parent device */
-               return kobject_kset_add_dir(&dev->class->class_dirs,
-                                           parent_kobj, dev->class->name);
+               k = kobject_create();
+               if (!k)
+                       return NULL;
+               k->kset = &dev->class->class_dirs;
+               retval = kobject_add_ng(k, parent_kobj, "%s", dev->class->name);
+               if (retval < 0) {
+                       kobject_put(k);
+                       return NULL;
+               }
+               /* Do not emit a uevent, as it's not needed for this
+                * "class glue" directory. */
+               return k;
        }
 
        if (parent)
index 7b09136fb2113b6b8a23a014865d2ae80a468d9b..718b488112882828ef20acee3b4743de229ad384 100644 (file)
@@ -91,6 +91,7 @@ extern int __must_check kobject_init_and_add(struct kobject *kobj,
 
 extern void kobject_del(struct kobject *);
 
+extern struct kobject * __must_check kobject_create(void);
 extern struct kobject * __must_check kobject_create_and_add(const char *name,
                                                struct kobject *parent);
 
@@ -103,9 +104,6 @@ extern void kobject_unregister(struct kobject *);
 extern struct kobject * kobject_get(struct kobject *);
 extern void kobject_put(struct kobject *);
 
-extern struct kobject *kobject_kset_add_dir(struct kset *kset,
-                                           struct kobject *, const char *);
-
 extern char * kobject_get_path(struct kobject *, gfp_t);
 
 struct kobj_type {
index 96b61d9a9284ada9fa77430ff0779a86b7d81510..67c3d38d48f0c3ef20b48b328133560e0bf4f662 100644 (file)
@@ -629,15 +629,18 @@ static struct kobj_type dynamic_kobj_ktype = {
        .release = dynamic_kobj_release,
 };
 
-/*
+/**
  * kobject_create - create a struct kobject dynamically
  *
  * This function creates a kobject structure dynamically and sets it up
  * to be a "dynamic" kobject with a default release function set up.
  *
  * If the kobject was not able to be created, NULL will be returned.
+ * The kobject structure returned from here must be cleaned up with a
+ * call to kobject_put() and not kfree(), as kobject_init_ng() has
+ * already been called on this structure.
  */
-static struct kobject *kobject_create(void)
+struct kobject *kobject_create(void)
 {
        struct kobject *kobj;
 
@@ -682,36 +685,6 @@ struct kobject *kobject_create_and_add(const char *name, struct kobject *parent)
 }
 EXPORT_SYMBOL_GPL(kobject_create_and_add);
 
-/**
- *     kobject_kset_add_dir - add sub directory of object.
- *     @kset:          kset the directory is belongs to.
- *     @parent:        object in which a directory is created.
- *     @name:  directory name.
- *
- *     Add a plain directory object as child of given object.
- */
-struct kobject *kobject_kset_add_dir(struct kset *kset,
-                                    struct kobject *parent, const char *name)
-{
-       struct kobject *k;
-       int ret;
-
-       k = kobject_create();
-       if (!k)
-               return NULL;
-
-       k->kset = kset;
-       ret = kobject_add_ng(k, parent, "%s", name);
-       if (ret < 0) {
-               printk(KERN_WARNING "%s: kobject_add error: %d\n",
-                       __func__, ret);
-               kobject_put(k);
-               k = NULL;
-       }
-
-       return k;
-}
-
 /**
  *     kset_init - initialize a kset for use
  *     @k:     kset