Thread (28 messages) 28 messages, 10 authors, 2007-03-16

Re: Make sure we populate the initroot filesystem late enough

From: Linus Torvalds <torvalds@linux-foundation.org>
Date: 2007-02-26 04:13:54
Also in: lkml


On Sun, 25 Feb 2007, David Woodhouse wrote:
quoted
Can you try adding something like

        memset(start, 0xf0, end - start);
Yeah, I did that before giving up on it for the day and going in search
of dinner. It changes the failure mode to a BUG() in
cache_free_debugcheck(), at line 2876 of mm/slab.c
Ok, that's just strange. 

One obvious thing to do would be to remove all the "__initdata" entries in 
mm/slab.c.. But I'd also like to see the full backtrace for the  BUG_ON(), 
in case that gives any clues at all.
It smells like the pages weren't actually reserved in the first place
and we were blithely allocating them. The only problem with that theory
is that the initrd doesn't seem to be getting corrupted -- and if we
were handing out its pages like that then surely _something_ would have
scribbled on it before we tried to read it.
Yeah, I don't think it's necessarily initrd itself, I'd be more inclined 
to think that the reason you see this change with the initrd unpacking is 
simply that it does a lot of allocations for the initrd files, so I think 
it is only indirectly involved - just because it ends up being a slab 
user.
When I head back in tomorrow morning I'll instrument free_initrd_mem()
to check that the PageReserved bit was actually set on each page, before
clearing it. And I'll make the page allocation routines check whether
they're giving out pages between initrd_start and initrd_end, etc.
Sounds like a sane plan.

			Linus
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help