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