From: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
To: Peter Zijlstra <peterz@infradead.org>
Cc: Andrew Morton <akpm@linux-foundation.org>,
linux-kernel <linux-kernel@vger.kernel.org>,
hugh <hugh@veritas.com>, Jens Axboe <jens.axboe@oracle.com>,
Eric Dumazet <dada1@cosmosbay.com>
Subject: Re: [PATCH] slab: document SLAB_DESTROY_BY_RCU
Date: Thu, 13 Nov 2008 09:32:49 -0800 [thread overview]
Message-ID: <20081113173249.GB6788@linux.vnet.ibm.com> (raw)
In-Reply-To: <1226586509.7685.4929.camel@twins>
On Thu, Nov 13, 2008 at 03:28:29PM +0100, Peter Zijlstra wrote:
> Subject: slab: document SLAB_DESTROY_BY_RCU
> From: Peter Zijlstra <a.p.zijlstra@chello.nl>
> Date: Wed, 02 Apr 2008 14:13:42 +0200
>
> Explain this SLAB_DESTROY_BY_RCU thing...
With Hugh's suggested change,
Re-acked-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
> Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
> Acked-by: Jens Axboe <jens.axboe@oracle.com>
> Acked-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
> ---
> include/linux/slab.h | 26 ++++++++++++++++++++++++++
> 1 file changed, 26 insertions(+)
>
> Index: linux-2.6/include/linux/slab.h
> ===================================================================
> --- linux-2.6.orig/include/linux/slab.h
> +++ linux-2.6/include/linux/slab.h
> @@ -23,6 +23,32 @@
> #define SLAB_CACHE_DMA 0x00004000UL /* Use GFP_DMA memory */
> #define SLAB_STORE_USER 0x00010000UL /* DEBUG: Store the last owner for bug hunting */
> #define SLAB_PANIC 0x00040000UL /* Panic if kmem_cache_create() fails */
> +/*
> + * SLAB_DESTROY_BY_RCU - **WARNING** READ THIS!
> + *
> + * This delays freeing the SLAB page by a grace period, it does _NOT_
> + * delay object freeing. This means that if you do kmem_cache_free()
> + * that memory location is free to be reused at any time. Thus it may
> + * be possible to see another object there in the same RCU grace period.
> + *
> + * This feature only ensures the memory location backing the object
> + * stays valid, the trick to using this is relying on an independent
> + * object validation pass. Something like:
> + *
> + * rcu_read_lock()
> + * again:
> + * obj = lockless_lookup(key);
> + * if (obj) {
> + * if (!try_get_ref(obj)) // might fail for free objects
> + * goto again;
> + *
> + * if (obj->key != key) { // not the object we expected
> + * put_ref(obj);
> + * goto again;
> + * }
> + * }
> + * rcu_read_unlock();
> + */
> #define SLAB_DESTROY_BY_RCU 0x00080000UL /* Defer freeing slabs to RCU */
> #define SLAB_MEM_SPREAD 0x00100000UL /* Spread some memory over cpuset */
> #define SLAB_TRACE 0x00200000UL /* Trace allocations and frees */
>
prev parent reply other threads:[~2008-11-13 17:33 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-11-13 14:28 [PATCH] slab: document SLAB_DESTROY_BY_RCU Peter Zijlstra
2008-11-13 14:57 ` Pekka Enberg
2008-11-13 17:25 ` Christoph Lameter
2008-11-13 17:31 ` Pekka Enberg
2008-11-13 17:50 ` Peter Zijlstra
2008-11-13 16:33 ` Hugh Dickins
2008-11-13 17:05 ` Peter Zijlstra
2008-11-13 18:23 ` Pekka Enberg
2008-11-13 17:32 ` Paul E. McKenney [this message]
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=20081113173249.GB6788@linux.vnet.ibm.com \
--to=paulmck@linux.vnet.ibm.com \
--cc=akpm@linux-foundation.org \
--cc=dada1@cosmosbay.com \
--cc=hugh@veritas.com \
--cc=jens.axboe@oracle.com \
--cc=linux-kernel@vger.kernel.org \
--cc=peterz@infradead.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.