From: Greg KH <greg@kroah.com>
To: Dipankar Sarma <dipankar@in.ibm.com>
Cc: Ravikiran G Thirumalai <kiran@in.ibm.com>, linux-kernel@vger.kernel.org
Subject: Re: [RFC] Refcounting of objects part of a lockfree collection
Date: Wed, 14 Jul 2004 07:26:14 -0700 [thread overview]
Message-ID: <20040714142614.GA15742@kroah.com> (raw)
In-Reply-To: <20040714082621.GA4291@in.ibm.com>
On Wed, Jul 14, 2004 at 01:56:22PM +0530, Dipankar Sarma wrote:
> On Wed, Jul 14, 2004 at 12:07:00AM -0700, Greg KH wrote:
> > On Wed, Jul 14, 2004 at 10:23:50AM +0530, Ravikiran G Thirumalai wrote:
> > >
> > > The attatched patch provides infrastructure for refcounting of objects
> > > in a rcu protected collection.
> >
> > This is really close to the kref implementation. Why not just use that
> > instead?
>
> Well, the kref has the same get/put race if used in a lock-free
> look-up. When you do a kref_get() it is assumed that another
> cpu will not see a 1-to-0 transition of the reference count.
You mean kref_put(), right?
> If that indeed happens, ->release() will get invoked more
> than once for that object which is bad.
As kref_put() uses a atomic_t, how can that transistion happen twice?
What can happen is kref_get() and kref_put() can race if the last
kref_put() happens at the same time that kref_get(). But that is solved
by having the caller guarantee that this can not happen (see my 2004 OLS
paper for more info about this.)
> Kiran's patch actually solves this fundamental lock-free ref-counting
> problem.
Hm, maybe I'm missing something, but I don't see how it does so, based
on the implmentation of refcount_get() and refcount_put(). Sure, the
*_rcu implementations are a bit different, but if that's the only
difference with this code and kref, why not just add the rcu versions to
the kref code?
> The other issue is that there are many refcounted data structures
> like dentry, dst_entry, file etc. that do not use kref.
At this time, sure. But you could always change that :)
(and yes, to do so, we can always shrink the size of struct kref if
really needed...)
> If everybody were to use kref, we could possibly apply Kiran's
> lock-free extensions to kref itself and be done with it.
Ok, sounds like a plan to me. Having 2 refcount implementations in the
kernel that work alike, yet a bit different, is not acceptable. Please
rework struct kref to do this.
> Until then, we need the lock-free refcounting support from non-kref
> refcounting objects.
We've lived without it until now somehow :)
thanks,
greg k-h
next prev parent reply other threads:[~2004-07-14 14:34 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-07-14 4:53 [RFC] Refcounting of objects part of a lockfree collection Ravikiran G Thirumalai
2004-07-14 4:56 ` [RFC] Lock free fd lookup Ravikiran G Thirumalai
2004-07-14 15:17 ` Chris Wright
2004-07-15 14:22 ` Jesse Barnes
2004-07-15 16:10 ` Dipankar Sarma
2004-07-15 16:22 ` Jesse Barnes
2004-07-15 16:34 ` Chris Wright
2004-07-16 5:38 ` Ravikiran G Thirumalai
2004-07-16 6:27 ` William Lee Irwin III
2004-07-17 0:55 ` Keith Owens
2004-07-17 1:19 ` William Lee Irwin III
2004-07-17 2:12 ` Keith Owens
2004-07-17 2:34 ` William Lee Irwin III
2004-07-17 2:28 ` Keith Owens
2004-07-17 3:16 ` William Lee Irwin III
2004-07-17 13:48 ` Peter Zijlstra
2004-07-14 7:07 ` [RFC] Refcounting of objects part of a lockfree collection Greg KH
2004-07-14 8:26 ` Dipankar Sarma
2004-07-14 14:26 ` Greg KH [this message]
2004-07-14 15:22 ` Dipankar Sarma
2004-07-14 17:03 ` Greg KH
2004-07-14 17:49 ` Dipankar Sarma
2004-07-14 18:03 ` Greg KH
2004-07-15 6:21 ` Ravikiran G Thirumalai
2004-07-15 6:56 ` Dipankar Sarma
2004-07-14 8:57 ` Ravikiran G Thirumalai
2004-07-14 17:08 ` Greg KH
2004-07-14 18:17 ` Dipankar Sarma
2004-07-15 8:02 ` Ravikiran G Thirumalai
2004-07-15 9:36 ` Dipankar Sarma
2004-07-16 14:32 ` Greg KH
2004-07-16 15:50 ` Ravikiran G Thirumalai
-- strict thread matches above, loose matches on Subject: below --
2004-07-14 10:24 Oleg Nesterov
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20040714142614.GA15742@kroah.com \
--to=greg@kroah.com \
--cc=dipankar@in.ibm.com \
--cc=kiran@in.ibm.com \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.