From foo@baz Tue Apr 9 12:12:43 2002 To: Greg KH Date: 11 Dec 2003 09:49:24 -08:00 From: greg@kroah.com Subject: kobject: fix bug where a parent could be deleted before a child device. diff -Nru a/lib/kobject.c b/lib/kobject.c --- a/lib/kobject.c Thu Dec 11 09:54:23 2003 +++ b/lib/kobject.c Thu Dec 11 09:54:23 2003 @@ -236,8 +236,6 @@ list_del_init(&kobj->entry); up_write(&kobj->kset->subsys->rwsem); } - if (kobj->parent) - kobject_put(kobj->parent); kobject_put(kobj); } @@ -274,9 +272,11 @@ kobj->parent = parent; error = create_dir(kobj); - if (error) + if (error) { unlink(kobj); - else { + if (parent) + kobject_put(parent); + } else { /* If this kobj does not belong to a kset, try to find a parent that does. */ top_kobj = kobj; @@ -452,6 +452,7 @@ { struct kobj_type * t = get_ktype(kobj); struct kset * s = kobj->kset; + struct kobject * parent = kobj->parent; pr_debug("kobject %s: cleaning up\n",kobject_name(kobj)); if (kobj->k_name != kobj->name) @@ -461,6 +462,8 @@ t->release(kobj); if (s) kset_put(s); + if (parent) + kobject_put(parent); } /**