[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <1226586148.7685.4915.camel@twins>
Date: Thu, 13 Nov 2008 15:22:28 +0100
From: Peter Zijlstra <a.p.zijlstra@...llo.nl>
To: Eric Dumazet <dada1@...mosbay.com>
Cc: David Miller <davem@...emloft.net>,
"Paul E. McKenney" <paulmck@...ux.vnet.ibm.com>,
Corey Minyard <minyard@....org>,
Stephen Hemminger <shemminger@...tta.com>,
benny+usenet@...rsen.dk,
Linux Netdev List <netdev@...r.kernel.org>,
Christoph Lameter <cl@...ux-foundation.org>,
Evgeniy Polyakov <zbr@...emap.net>,
Christian Bell <christian@...i.com>
Subject: Re: [PATCH 3/3] net: Convert TCP & DCCP hash tables to use RCU /
hlist_nulls
On Thu, 2008-11-13 at 14:51 +0100, Eric Dumazet wrote:
> Peter Zijlstra a écrit :
> > On Thu, 2008-11-13 at 14:15 +0100, Eric Dumazet wrote:
> >> +begin:
> >> + sk_nulls_for_each_rcu(sk, node, &head->chain) {
> >> if (INET_MATCH(sk, net, hash, acookie,
> >> + saddr, daddr, ports, dif)) {
> >> + if (unlikely(!atomic_inc_not_zero(&sk->sk_refcnt)))
> >> + goto begintw;
> >> + if (unlikely(!INET_MATCH(sk, net, hash, acookie,
> >> + saddr, daddr, ports, dif))) {
> >> + sock_put(sk);
> >> + goto begin;
> >> + }
> >
> > This is the validation step that verifies the race opened by using
> > SLAB_DESTROY_BY_RCU, right?
>
> The atomic_inc_not_zero() is not related to SLAB_DESTROY_BY_RCU but
> classic RCU lookup. A writer can delete the item right before we try to use it.
Yeah, its to stabilize the current situation.
> Next step is necessary in case the deleted item was re-allocated and inserted
> in a hash chain (this one or another one, it doesnt matter). In this case,
> previous atomic_inc_not_zero test will succeed. So we must check again the item
> we selected (and refcounted) is the one we were searching.
>
> So yes, this bit should be documented, since SLAB_DESTROY_BY_RCU is
> not really used in linux kernel at this moment.
We have one user, anon_vma, and one thing that is very nearly identical
the lockless pagecache.
See page_cache_get_speculative() and find_get_page(). The pagecache gets
away with this due to the simple fact that the page frames are never
freed.
Hmm, I once wrote a comment to go with SLAB_DESTROY_BY_RCU, which seems
to have gotten lost... /me goes dig.
Found it: http://lkml.org/lkml/2008/4/2/143
I guess I'd better re-submit that..
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Powered by blists - more mailing lists