From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1757036AbXLJTwF (ORCPT ); Mon, 10 Dec 2007 14:52:05 -0500 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1753316AbXLJTvu (ORCPT ); Mon, 10 Dec 2007 14:51:50 -0500 Received: from relay.2ka.mipt.ru ([194.85.82.65]:44081 "EHLO 2ka.mipt.ru" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754110AbXLJTvt (ORCPT ); Mon, 10 Dec 2007 14:51:49 -0500 Date: Mon, 10 Dec 2007 22:51:45 +0300 From: Evgeniy Polyakov To: Kay Sievers Cc: lkml , netdev@vger.kernel.org, linux-fsdevel@vger.kernel.org, Greg KH Subject: Re: [1/4] DST: Distributed storage documentation. Message-ID: <20071210195145.GA29132@2ka.mipt.ru> References: <11972872493977@2ka.mipt.ru> <11972872501664@2ka.mipt.ru> <3ae72650712100451h6a84d6cfs9b3a2954c13c4612@mail.gmail.com> <20071210125839.GA16789@2ka.mipt.ru> <1197297108.6399.91.camel@lov.site> <20071210145055.GB7184@2ka.mipt.ru> <1197313348.6399.106.camel@lov.site> <20071210193304.GA24737@2ka.mipt.ru> <1197315895.6399.121.camel@lov.site> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1197315895.6399.121.camel@lov.site> User-Agent: Mutt/1.5.9i Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Mon, Dec 10, 2007 at 08:44:55PM +0100, Kay Sievers (kay.sievers@vrfy.org) wrote: > > > > Actually not - I have to set reference counter to something other than 1 > > > > or +/- 1, and thus will have to call kref_get() in a loop, which is a > > > > very ugly step. Is there kref_set() or somethinglike that? At least not > > > > in 2.6.22 what I'm using for now. > > > > > > Yeah, a loop would look pretty ugly. How about just adding kref_set(), > > > if you need it. > > > > Well, then it distributed storage will not be able to build as > > standalone module, and kref_set() itself will not be accepted as a single > > patch, since there are no in-kernel users :) > > It is easily doable though. > > Most rules have exceptions. :) Send a patch, so we can see how it looks > like. It looks really non-trivial :) Signed-off-by: Evgeniy Polyakov diff --git a/include/linux/kref.h b/include/linux/kref.h index 6fee353..5d18563 100644 --- 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)); diff --git a/lib/kref.c b/lib/kref.c index a6dc3ec..40aa9f9 100644 --- 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); } /** -- Evgeniy Polyakov