Messages in this thread Patch in this message | | | Subject | Re: [PATCH next/mmotm] slub: partly fix freeze in __slab_free | From | Eric Dumazet <> | Date | Mon, 11 Jul 2011 21:39:27 +0200 |
| |
Le lundi 11 juillet 2011 à 11:58 -0700, Hugh Dickins a écrit : > My load tests on PowerPC freeze within minutes in __slab_free(). > I happened to try PPC first, didn't try without this fix on x86. > > It looks as if the author was interrupted while devising the new > cmpxchg_double_slab() version of __slab_free(): its decision to > spin_lock_irqsave() depends on several uninitialized fields, > and fixing that (by copying page to new) mostly fixes it. > > But I didn't think about it very much, and this may well not be what > the author intends; and I have seen a couple of much rarer freezes > in __slab_free() on PPC (not yet on x86) even after applying this. > > Signed-off-by: Hugh Dickins <hughd@google.com> > --- > mm/slub.c | 1 + > 1 file changed, 1 insertion(+) > > --- mmotm/mm/slub.c 2011-07-08 18:59:44.135443127 -0700 > +++ linux/mm/slub.c 2011-07-10 05:07:08.000000000 -0700 > @@ -2217,6 +2217,7 @@ static void __slab_free(struct kmem_cach > return; > > do { > + new = *page; > prior = page->freelist; > counters = page->counters; > set_freepointer(s, object, prior); > --
I suspect you hit the bug on 32bit arch ?
What about following patch instead ?
diff --git a/include/linux/mm_types.h b/include/linux/mm_types.h index 3d76a43..1351d28 100644 --- a/include/linux/mm_types.h +++ b/include/linux/mm_types.h @@ -62,7 +62,7 @@ struct page { struct { /* SLUB cmpxchg_double area */ void *freelist; union { - unsigned long counters; + u64 counters; struct { unsigned inuse:16; unsigned objects:15;
-- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |