> From:
>
> Dave Anderson <anderson@redhat.com>
>
...
> But your kernel shows cache_cache.buffer_size
set to zero -- and the
> ASSIGN_SIZE(kmem_cache_s) above dutifully downsized the data structure
> size from 204 to zero. Later on, that size was used to allocate
a
> kmem_cache buffer, which failed when a GETBUF() was called with a
zero-size.
>
> I guess a check could be made above for a zero cache_cache.buffer_size,
> but why would that ever be?
>
> Try this:
>
> # crash --no_kmem_cache vmlinux vmcore
>
> which will allow you to get past the kmem_cache initialization.
>
> Then enter:
>
> crash> p cache_cache
>
> Does the "buffer_size" member really show zero?
Yes it seems so!
initialize_task_state: using old defaults
<readmem: 8067a300, KVADDR, "fill_task_struct",
868, (ROE), 86e3f78>
addr: 8067a300 paddr: 67a300 cnt:
868
STATE: TASK_RUNNING (PANIC)
crash> p cache_cache
cache_cache = GETBUF(128 -> 0)
<readmem: 8067f1c0, KVADDR, "gdb_readmem_callback",
204, (ROE), 8ac00d8>
addr: 8067f1c0 paddr: 67f1c0 cnt:
204
$3 = {
array = {0x0, 0x8067f1c4, 0x8067f1c4, 0x0,
0x0, 0x0, 0x0, 0x0, 0xf7813e00, 0xf7849400, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0},
batchcount = 0,
limit = 0,
shared = 0,
buffer_size = 0,
reciprocal_buffer_size = 0,
flags = 0,
num = 0,
gfporder = 0,
gfpflags = 60,
colour = 120,
colour_off = 8,
slabp_cache = 0x100,
slab_size = 16777216,
dflags = 0,
ctor = 0xf,
name = 0x0,
next = {
next = 0x0,
prev = 0x2
},
nodelists = {0x40}
}
FREEBUF(0)
>
> BTW, you can work around the problem by commenting out the call
> to kmem_cache_downsize() in vm_init().
This workaround works ok.
(And if you're using
> makedumpfile with excluded pages, hope that the problem I described
> above doesn't occur...)
>
We are not excluding files so this is not a
big issue. Also
the --no_kmem_cache lets me open dump and let
me do quite many things already.
- Ville