ChangeSet 1.1803.64.8, 2004/08/25 12:30:41-07:00, greg@kroah.com kobject: convert struct kobject use kref. Signed-off-by: Greg Kroah-Hartman include/linux/kobject.h | 3 ++- lib/Makefile | 5 +---- lib/kobject.c | 19 ++++++++++--------- 3 files changed, 13 insertions(+), 14 deletions(-) diff -Nru a/include/linux/kobject.h b/include/linux/kobject.h --- a/include/linux/kobject.h 2004-08-25 14:54:37 -07:00 +++ b/include/linux/kobject.h 2004-08-25 14:54:37 -07:00 @@ -19,6 +19,7 @@ #include #include #include +#include #include #define KOBJ_NAME_LEN 20 @@ -26,7 +27,7 @@ struct kobject { char * k_name; char name[KOBJ_NAME_LEN]; - atomic_t refcount; + struct kref kref; struct list_head entry; struct kobject * parent; struct kset * kset; diff -Nru a/lib/Makefile b/lib/Makefile --- a/lib/Makefile 2004-08-25 14:54:37 -07:00 +++ b/lib/Makefile 2004-08-25 14:54:37 -07:00 @@ -5,11 +5,8 @@ lib-y := errno.o ctype.o string.o vsprintf.o cmdline.o \ bust_spinlocks.o rbtree.o radix-tree.o dump_stack.o \ - kobject.o idr.o div64.o parser.o int_sqrt.o \ + kobject.o kref.o idr.o div64.o parser.o int_sqrt.o \ bitmap.o extable.o - -# hack for now till some static code uses krefs, then it can move up above... -obj-y += kref.o lib-$(CONFIG_RWSEM_GENERIC_SPINLOCK) += rwsem-spinlock.o lib-$(CONFIG_RWSEM_XCHGADD_ALGORITHM) += rwsem.o diff -Nru a/lib/kobject.c b/lib/kobject.c --- a/lib/kobject.c 2004-08-25 14:54:37 -07:00 +++ b/lib/kobject.c 2004-08-25 14:54:37 -07:00 @@ -243,10 +243,9 @@ * kobject_init - initialize object. * @kobj: object in question. */ - void kobject_init(struct kobject * kobj) { - atomic_set(&kobj->refcount,1); + kref_init(&kobj->kref); INIT_LIST_HEAD(&kobj->entry); kobj->kset = kset_get(kobj->kset); } @@ -447,10 +446,8 @@ struct kobject * kobject_get(struct kobject * kobj) { - if (kobj) { - WARN_ON(!atomic_read(&kobj->refcount)); - atomic_inc(&kobj->refcount); - } + if (kobj) + kref_get(&kobj->kref); return kobj; } @@ -477,17 +474,21 @@ kobject_put(parent); } +static void kobject_release(struct kref *kref) +{ + kobject_cleanup(container_of(kref, struct kobject, kref)); +} + /** * kobject_put - decrement refcount for object. * @kobj: object. * * Decrement the refcount, and if 0, call kobject_cleanup(). */ - void kobject_put(struct kobject * kobj) { - if (atomic_dec_and_test(&kobj->refcount)) - kobject_cleanup(kobj); + if (kobj) + kref_put(&kobj->kref, kobject_release); }