[Crash-utility] Crash kmem error
Dave Anderson
anderson at redhat.com
Wed May 11 12:46:46 UTC 2011
----- Original Message -----
> Hi,
>
> When I used crash based off of a mainline kernel to run kmem, it
> failed. For your information, the detailed description of the problem
> is as follows.
>
> Version-Release number of selected component:
> # uname -a
> Linux hp-rx8640-02.rhts.eng.bos.redhat.com 2.6.39-rc6+ #2 SMP Mon May
> 9 23:05:14 EDT 2011 ia64 ia64 ia64 GNU/Linux
>
> Steps to Reproduce:
> 1、update the old kernel to the mainline kernel 2.6.39-rc6+
> 2、install crash
> 3、# crash <where the mainline kernel tree is>/vmlinux
> 4、crash> kmem -s
> CACHE NAME OBJSIZE ALLOCATED TOTAL SLABS SSIZE
>
> kmem: invalid structure member offset: slab_list
> FILE: memory.c LINE: 9588 FUNCTION: verify_slab_v2()
>
> [/usr/bin/crash] error trace: 40000000000db7c0 => 40000000000ca450 =>
> 40000000000c8ea0 => 40000000001c74a0
>
> 40000000001c74a0: OFFSET_verify+224
> 40000000000c8ea0: verify_slab_v2+448
> 40000000000ca450: do_slab_chain_percpu_v2_nodes+4208
> 40000000000db7c0: dump_kmem_cache_percpu_v2+3536
>
> kmem: invalid structure member offset: slab_list
> FILE: memory.c LINE: 9588 FUNCTION: verify_slab_v2()
>
>
> Best Regards,
> Qiannan Cui
Yes, I remember seeing the LKML post changing the slab structure
from this:
struct slab {
struct list_head list;
unsigned long colouroff;
void *s_mem; /* including colour offset */
unsigned int inuse; /* num of objs active in slab */
kmem_bufctl_t free;
unsigned short nodeid;
};
to this:
struct slab {
union {
struct {
struct list_head list;
unsigned long colouroff;
void *s_mem; /* including colour offset */
unsigned int inuse; /* num of objs active in slab */
kmem_bufctl_t free;
unsigned short nodeid;
};
struct slab_rcu __slab_cover_slab_rcu;
};
};
I had hoped that since the pre-existing fields had been moved
into an anonymous union that the member offsets would be
returned by gdb the same way. Apparently not:
(gdb) ptype struct slab
type = struct slab {
union {
struct {...};
struct slab_rcu __slab_cover_slab_rcu;
};
}
(gdb)
But the offsets can be determined in another manner.
Thanks,
Dave
More information about the Crash-utility
mailing list