From johnpol@2ka.mipt.ru Mon Dec 10 12:03:55 2007 From: Evgeniy Polyakov Date: Mon, 10 Dec 2007 23:03:43 +0300 Subject: kref: add kref_set() To: Kay Sievers Cc: Greg KH Message-ID: <20071210200343.GA12635@2ka.mipt.ru> Content-Disposition: inline This adds kref_set() to the kref api for future use by people who really know what they are doing with krefs... From: Evgeniy Polyakov Cc: Kay Sievers Signed-off-by: Greg Kroah-Hartman --- include/linux/kref.h | 1 + lib/kref.c | 15 +++++++++++++-- 2 files changed, 14 insertions(+), 2 deletions(-) --- a/include/linux/kref.h +++ b/include/linux/kref.h @@ -24,6 +24,7 @@ struct kref { atomic_t refcount; }; +void kref_set(struct kref *kref, int num); void kref_init(struct kref *kref); void kref_get(struct kref *kref); int kref_put(struct kref *kref, void (*release) (struct kref *kref)); --- a/lib/kref.c +++ b/lib/kref.c @@ -15,13 +15,23 @@ #include /** + * kref_set - initialize object and set refcount to requested number. + * @kref: object in question. + * @num: initial reference counter + */ +void kref_set(struct kref *kref, int num) +{ + atomic_set(&kref->refcount, num); + smp_mb(); +} + +/** * kref_init - initialize object. * @kref: object in question. */ void kref_init(struct kref *kref) { - atomic_set(&kref->refcount,1); - smp_mb(); + kref_set(kref, 1); } /** @@ -61,6 +71,7 @@ int kref_put(struct kref *kref, void (*r return 0; } +EXPORT_SYMBOL(kref_set); EXPORT_SYMBOL(kref_init); EXPORT_SYMBOL(kref_get); EXPORT_SYMBOL(kref_put);