diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/kobject.c | 7 |
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 | ||
150 | static void unlink(struct kobject * kobj) | 150 | static 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 | ||
610 | static void kobject_release(struct kref *kref) | 611 | static void kobject_release(struct kref *kref) |