Messages in this thread | | | Date | Mon, 21 May 2007 19:44:50 +0100 (BST) | From | Hugh Dickins <> | Subject | Re: [PROBLEM] 2.6.22-rc2 panics on x86-64 with slub |
| |
On Mon, 21 May 2007, Christoph Lameter wrote: > On Mon, 21 May 2007, Hugh Dickins wrote: > > > Yes, sounded the same to me too: I couldn't reproduce it or see anything > > wrong in the code back then. But Srihari's info about CONFIG_DEBUG_SLUB > > off has helped a lot: I was then able to reproduce it on my x86_64, and > > after a lot of staring at the code, the problem became obvious... > > Right. The #ifdef CONFIG_SLUB_DEBUG is at the wrong location. The best fix > is to moving the #ifdef otherwise the size is still wrong for the > ctor case.
? My patch did handle the ctor case.
> > SLUB Debug: Fix object size calculation > > The object size calculation is wrong if !CONFIG_SLUB_DEBUG because > the #ifdef CONFIG_SLUB_DEBUG is now switching off the size adjustments > for DESTROY_BY_RCU and ctor. > > Signed-off-by: Christoph Lameter <clameter@sgi.com>
Yes, I think that should do it too. The reason behind my repeating the block was to handle the case where SLAB_POISON is passed to kmem_cache_create, but CONFIG_SLUB_DEBUG is off. But apparently that case would hit the BUG_ON(flags & ~CREATE_MASK), therefore your patch is simpler and better. Quite a maze.
Hugh
> > --- > mm/slub.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > Index: slub/mm/slub.c > =================================================================== > --- slub.orig/mm/slub.c 2007-05-21 11:21:36.000000000 -0700 > +++ slub/mm/slub.c 2007-05-21 11:21:49.000000000 -0700 > @@ -1943,7 +1943,6 @@ static int calculate_sizes(struct kmem_c > */ > s->inuse = size; > > -#ifdef CONFIG_SLUB_DEBUG > if (((flags & (SLAB_DESTROY_BY_RCU | SLAB_POISON)) || > s->ctor)) { > /* > @@ -1958,6 +1957,7 @@ static int calculate_sizes(struct kmem_c > size += sizeof(void *); > } > > +#ifdef CONFIG_SLUB_DEBUG > if (flags & SLAB_STORE_USER) > /* > * Need to store information about allocs and frees after - 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/
| |