aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/kobject.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/lib/kobject.c b/lib/kobject.c
index 1015f74212d0..493e991abb1b 100644
--- a/lib/kobject.c
+++ b/lib/kobject.c
@@ -149,12 +149,16 @@ void kobject_init(struct kobject * kobj)
149 149
150static void unlink(struct kobject * kobj) 150static void unlink(struct kobject * kobj)
151{ 151{
152 struct kobject *parent = kobj->parent;
153
152 if (kobj->kset) { 154 if (kobj->kset) {
153 spin_lock(&kobj->kset->list_lock); 155 spin_lock(&kobj->kset->list_lock);
154 list_del_init(&kobj->entry); 156 list_del_init(&kobj->entry);
155 spin_unlock(&kobj->kset->list_lock); 157 spin_unlock(&kobj->kset->list_lock);
156 } 158 }
159 kobj->parent = NULL;
157 kobject_put(kobj); 160 kobject_put(kobj);
161 kobject_put(parent);
158} 162}
159 163
160/** 164/**
@@ -208,7 +212,6 @@ int kobject_add(struct kobject * kobj)
208 if (error) { 212 if (error) {
209 /* unlink does the kobject_put() for us */ 213 /* unlink does the kobject_put() for us */
210 unlink(kobj); 214 unlink(kobj);
211 kobject_put(parent);
212 215
213 /* be noisy on error issues */ 216 /* be noisy on error issues */
214 if (error == -EEXIST) 217 if (error == -EEXIST)
@@ -590,7 +593,6 @@ static void kobject_cleanup(struct kobject *kobj)
590{ 593{
591 struct kobj_type * t = get_ktype(kobj); 594 struct kobj_type * t = get_ktype(kobj);
592 struct kset * s = kobj->kset; 595 struct kset * s = kobj->kset;
593 struct kobject * parent = kobj->parent;
594 const char *name = kobj->k_name; 596 const char *name = kobj->k_name;
595 597
596 pr_debug("kobject: '%s' (%p): %s\n", 598 pr_debug("kobject: '%s' (%p): %s\n",
@@ -604,7 +606,6 @@ static void kobject_cleanup(struct kobject *kobj)
604 } 606 }
605 if (s) 607 if (s)
606 kset_put(s); 608 kset_put(s);
607 kobject_put(parent);
608} 609}
609 610
610static void kobject_release(struct kref *kref) 611static void kobject_release(struct kref *kref)