aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/base/core.c16
-rw-r--r--include/linux/kobject.h4
-rw-r--r--lib/kobject.c37
3 files changed, 20 insertions, 37 deletions
diff --git a/drivers/base/core.c b/drivers/base/core.c
index 992eba3289bd..7762ee86697d 100644
--- a/drivers/base/core.c
+++ b/drivers/base/core.c
@@ -571,6 +571,8 @@ static struct kobject *virtual_device_parent(struct device *dev)
571static struct kobject * get_device_parent(struct device *dev, 571static struct kobject * get_device_parent(struct device *dev,
572 struct device *parent) 572 struct device *parent)
573{ 573{
574 int retval;
575
574 if (dev->class) { 576 if (dev->class) {
575 struct kobject *kobj = NULL; 577 struct kobject *kobj = NULL;
576 struct kobject *parent_kobj; 578 struct kobject *parent_kobj;
@@ -600,8 +602,18 @@ static struct kobject * get_device_parent(struct device *dev,
600 return kobj; 602 return kobj;
601 603
602 /* or create a new class-directory at the parent device */ 604 /* or create a new class-directory at the parent device */
603 return kobject_kset_add_dir(&dev->class->class_dirs, 605 k = kobject_create();
604 parent_kobj, dev->class->name); 606 if (!k)
607 return NULL;
608 k->kset = &dev->class->class_dirs;
609 retval = kobject_add_ng(k, parent_kobj, "%s", dev->class->name);
610 if (retval < 0) {
611 kobject_put(k);
612 return NULL;
613 }
614 /* Do not emit a uevent, as it's not needed for this
615 * "class glue" directory. */
616 return k;
605 } 617 }
606 618
607 if (parent) 619 if (parent)
diff --git a/include/linux/kobject.h b/include/linux/kobject.h
index 7b09136fb211..718b48811288 100644
--- a/include/linux/kobject.h
+++ b/include/linux/kobject.h
@@ -91,6 +91,7 @@ extern int __must_check kobject_init_and_add(struct kobject *kobj,
91 91
92extern void kobject_del(struct kobject *); 92extern void kobject_del(struct kobject *);
93 93
94extern struct kobject * __must_check kobject_create(void);
94extern struct kobject * __must_check kobject_create_and_add(const char *name, 95extern struct kobject * __must_check kobject_create_and_add(const char *name,
95 struct kobject *parent); 96 struct kobject *parent);
96 97
@@ -103,9 +104,6 @@ extern void kobject_unregister(struct kobject *);
103extern struct kobject * kobject_get(struct kobject *); 104extern struct kobject * kobject_get(struct kobject *);
104extern void kobject_put(struct kobject *); 105extern void kobject_put(struct kobject *);
105 106
106extern struct kobject *kobject_kset_add_dir(struct kset *kset,
107 struct kobject *, const char *);
108
109extern char * kobject_get_path(struct kobject *, gfp_t); 107extern char * kobject_get_path(struct kobject *, gfp_t);
110 108
111struct kobj_type { 109struct kobj_type {
diff --git a/lib/kobject.c b/lib/kobject.c
index 96b61d9a9284..67c3d38d48f0 100644
--- a/lib/kobject.c
+++ b/lib/kobject.c
@@ -629,15 +629,18 @@ static struct kobj_type dynamic_kobj_ktype = {
629 .release = dynamic_kobj_release, 629 .release = dynamic_kobj_release,
630}; 630};
631 631
632/* 632/**
633 * kobject_create - create a struct kobject dynamically 633 * kobject_create - create a struct kobject dynamically
634 * 634 *
635 * This function creates a kobject structure dynamically and sets it up 635 * This function creates a kobject structure dynamically and sets it up
636 * to be a "dynamic" kobject with a default release function set up. 636 * to be a "dynamic" kobject with a default release function set up.
637 * 637 *
638 * If the kobject was not able to be created, NULL will be returned. 638 * If the kobject was not able to be created, NULL will be returned.
639 * The kobject structure returned from here must be cleaned up with a
640 * call to kobject_put() and not kfree(), as kobject_init_ng() has
641 * already been called on this structure.
639 */ 642 */
640static struct kobject *kobject_create(void) 643struct kobject *kobject_create(void)
641{ 644{
642 struct kobject *kobj; 645 struct kobject *kobj;
643 646
@@ -683,36 +686,6 @@ struct kobject *kobject_create_and_add(const char *name, struct kobject *parent)
683EXPORT_SYMBOL_GPL(kobject_create_and_add); 686EXPORT_SYMBOL_GPL(kobject_create_and_add);
684 687
685/** 688/**
686 * kobject_kset_add_dir - add sub directory of object.
687 * @kset: kset the directory is belongs to.
688 * @parent: object in which a directory is created.
689 * @name: directory name.
690 *
691 * Add a plain directory object as child of given object.
692 */
693struct kobject *kobject_kset_add_dir(struct kset *kset,
694 struct kobject *parent, const char *name)
695{
696 struct kobject *k;
697 int ret;
698
699 k = kobject_create();
700 if (!k)
701 return NULL;
702
703 k->kset = kset;
704 ret = kobject_add_ng(k, parent, "%s", name);
705 if (ret < 0) {
706 printk(KERN_WARNING "%s: kobject_add error: %d\n",
707 __func__, ret);
708 kobject_put(k);
709 k = NULL;
710 }
711
712 return k;
713}
714
715/**
716 * kset_init - initialize a kset for use 689 * kset_init - initialize a kset for use
717 * @k: kset 690 * @k: kset
718 */ 691 */