From: Ravikiran G Thirumalai <kiran@scalex86.org>
To: Christoph Lameter <clameter@sgi.com>
Cc: Pekka Enberg <penberg@cs.helsinki.fi>,
alokk@calsoftinc.com, tglx@linutronix.de,
LKML <linux-kernel@vger.kernel.org>, Ingo Molnar <mingo@elte.hu>,
Arjan van de Ven <arjan@infradead.org>
Subject: Re: [BUG] Lockdep recursive locking in kmem_cache_free
Date: Fri, 28 Jul 2006 10:11:55 -0700 [thread overview]
Message-ID: <20060728171155.GA3739@localhost.localdomain> (raw)
In-Reply-To: <Pine.LNX.4.64.0607280744530.18198@schroedinger.engr.sgi.com>
On Fri, Jul 28, 2006 at 07:53:56AM -0700, Christoph Lameter wrote:
> On Fri, 28 Jul 2006, Pekka Enberg wrote:
>
> > > [ 57.976447] [<ffffffff802542fc>] __lock_acquire+0x8cc/0xcb0
> > > [ 57.976562] [<ffffffff80254a02>] lock_acquire+0x52/0x70
> > > [ 57.976675] [<ffffffff8028f201>] kmem_cache_free+0x141/0x210
> > > [ 57.976790] [<ffffffff804a6b74>] _spin_lock+0x34/0x50
> > > [ 57.976903] [<ffffffff8028f201>] kmem_cache_free+0x141/0x210
> > > [ 57.977018] [<ffffffff8028f388>] slab_destroy+0xb8/0xf0
>
> Huh? _spin_lock calls kmem_cache_free?
>
> > cache_reap
> > reap_alien (grabs l3->alien[node]->lock)
> > __drain_alien_cache
> > free_block
> > slab_destroy (slab management off slab)
> > kmem_cache_free
> > __cache_free
> > cache_free_alien (recursive attempt on l3->alien[node] lock)
> >
> > Christoph?
>
> This should not happen. __drain_alien_cache frees node local elements
> thus cache_free_alien should not be called. However, if the slab
> management was allocated on a different node from the slab data then we
> may have an issue. However, both slab managemnt and the slab data are
> allocated on the same node (with alloc_pages_node() and kmalloc_node).
cache_free_alien could get called, but there is no recursion here:
1. reap_alien tries dropping remote objects freed by local node (A) to the
remote node (B) shared array cache (choosing a remote node as indicated by the
node rotor), to do this, it takes the local alien cache lock (A), and calls
__drain_alien_cache. The remote object comes from a slab cache X say.
2. __drain_alien_cache. takes the remote node l3 lock (B), transfers as many
objects as shared array cache of the remote node can hold, and calls
free_block to free remaining objects that could not be dropped in into the
shared array cache of remote node (B). Now free_block is being called from
(A) to free objects on (B).
3. free_block calls slab_destroy for the slab belonging to B. calls
kmem_cache_free for the slab management, which calls __cache_free, and
hence cache_free_alien(). Now since this is being called from A for a local
object of B, the check in cache_free_alien fails, and cache_free_alien
*does* get executed. Since slab management of a slab from B, local to B is
freed from A, A tries to write to the local alien cache corresponding to B,
which comes from a slab cache Y. There is a recursion if X and Y are the
same caches. But that is not a possibility at all, as the off slab management
for a slab cache cannot come from the same slab cache. So this looks like a
false positive from lockdep.
tglx, does the machine boot without lockdep? If yes, then this is a false
positive IMO.
Thanks,
Kiran
next prev parent reply other threads:[~2006-07-28 17:10 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-07-27 23:56 [BUG] Lockdep recursive locking in kmem_cache_free Thomas Gleixner
2006-07-28 5:22 ` Pekka Enberg
2006-07-28 6:14 ` Thomas Gleixner
2006-07-28 15:35 ` Christoph Lameter
2006-07-28 20:11 ` Thomas Gleixner
2006-07-28 20:18 ` Christoph Lameter
2006-07-28 20:27 ` Arjan van de Ven
2006-07-28 20:27 ` Thomas Gleixner
2006-07-28 20:35 ` Thomas Gleixner
2006-07-28 20:36 ` Christoph Lameter
2006-07-28 20:47 ` Thomas Gleixner
2006-07-28 20:48 ` Christoph Lameter
2006-07-28 21:12 ` Ravikiran G Thirumalai
2006-07-28 21:20 ` Thomas Gleixner
2006-08-02 19:10 ` Ravikiran G Thirumalai
2006-08-07 7:27 ` Thomas Gleixner
2006-07-28 21:26 ` Christoph Lameter
2006-07-28 21:34 ` Alok Kataria
2006-07-29 4:26 ` Ravikiran G Thirumalai
2006-07-28 14:53 ` Christoph Lameter
2006-07-28 17:11 ` Ravikiran G Thirumalai [this message]
2006-07-28 17:14 ` Arjan van de Ven
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=20060728171155.GA3739@localhost.localdomain \
--to=kiran@scalex86.org \
--cc=alokk@calsoftinc.com \
--cc=arjan@infradead.org \
--cc=clameter@sgi.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=penberg@cs.helsinki.fi \
--cc=tglx@linutronix.de \
/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.