|
@@ -149,12 +149,16 @@ void kobject_init(struct kobject * kobj)
|
|
|
|
|
|
static void unlink(struct kobject * kobj)
|
|
|
{
|
|
|
+ struct kobject *parent = kobj->parent;
|
|
|
+
|
|
|
if (kobj->kset) {
|
|
|
spin_lock(&kobj->kset->list_lock);
|
|
|
list_del_init(&kobj->entry);
|
|
|
spin_unlock(&kobj->kset->list_lock);
|
|
|
}
|
|
|
+ kobj->parent = NULL;
|
|
|
kobject_put(kobj);
|
|
|
+ kobject_put(parent);
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -208,7 +212,6 @@ int kobject_add(struct kobject * kobj)
|
|
|
if (error) {
|
|
|
/* unlink does the kobject_put() for us */
|
|
|
unlink(kobj);
|
|
|
- kobject_put(parent);
|
|
|
|
|
|
/* be noisy on error issues */
|
|
|
if (error == -EEXIST)
|
|
@@ -590,7 +593,6 @@ static void kobject_cleanup(struct kobject *kobj)
|
|
|
{
|
|
|
struct kobj_type * t = get_ktype(kobj);
|
|
|
struct kset * s = kobj->kset;
|
|
|
- struct kobject * parent = kobj->parent;
|
|
|
const char *name = kobj->k_name;
|
|
|
|
|
|
pr_debug("kobject: '%s' (%p): %s\n",
|
|
@@ -604,7 +606,6 @@ static void kobject_cleanup(struct kobject *kobj)
|
|
|
}
|
|
|
if (s)
|
|
|
kset_put(s);
|
|
|
- kobject_put(parent);
|
|
|
}
|
|
|
|
|
|
static void kobject_release(struct kref *kref)
|