[Crash-utility] Crash on Linux 3.6 rc1

Dave Anderson anderson at redhat.com
Mon Aug 13 18:56:17 UTC 2012



----- Original Message -----
> I trip over this bug on Linux 3.6 rc1. Crash runs fine on Linux 3.5.
> 
> Thanks,
> 
> --Mark Tinguely.
> 
> 		------
> 
> ~/xfs # crash System.map vmlinux
> 
> crash 6.0.8
> Copyright (C) 2002-2012  Red Hat, Inc.
> Copyright (C) 2004, 2005, 2006, 2010  IBM Corporation
> Copyright (C) 1999-2006  Hewlett-Packard Co
> Copyright (C) 2005, 2006, 2011, 2012  Fujitsu Limited
> Copyright (C) 2006, 2007  VA Linux Systems Japan K.K.
> Copyright (C) 2005, 2011  NEC Corporation
> Copyright (C) 1999, 2002, 2007  Silicon Graphics, Inc.
> Copyright (C) 1999, 2000, 2001, 2002  Mission Critical Linux, Inc.
> This program is free software, covered by the GNU General Public License,
> and you are welcome to change it and/or distribute copies of it under
> certain conditions.  Enter "help copying" to see the conditions.
> This program has absolutely no warranty.  Enter "help warranty" for
> details.
> 
> GNU gdb (GDB) 7.3.1
> Copyright (C) 2011 Free Software Foundation, Inc.
> License GPLv3+: GNU GPL version 3 or later
> <http://gnu.org/licenses/gpl.html>
> This is free software: you are free to change and redistribute it.
> There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
> and "show warranty" for details.
> This GDB was configured as "x86_64-unknown-linux-gnu"...
> 
> 
> crash: invalid structure member offset: kmem_cache_s_next
>         FILE: memory.c  LINE: 7945  FUNCTION: kmem_cache_init()
> 
> [/usr/bin/crash] error trace: 468317 => 49dbb2 => 487f28 => 5083da
> 
>    5083da: OFFSET_verify+202
>    487f28: kmem_cache_init+312
>    49dbb2: vm_init+5794
>    468317: main_loop+215
> 
> ~/xfs # cat /proc/version
> Linux version 3.6.0-rc1 (root at cxfsxe12) (gcc version 4.3.4
> [gcc-4_3-branch revision 152973] (SUSE Linux) ) #1 SMP Fri Aug 10
> 17:03:36 CDT 2012
> 

Mark,

It's this part of commit 3b0efdfa1e719303536c04d9abca43abeb40f80a
that changed the kmem_cache.next member from "next" to "list":

diff --git a/include/linux/slab_def.h b/include/linux/slab_def.h
index fbd1117..1d93f27 100644
--- a/include/linux/slab_def.h
+++ b/include/linux/slab_def.h
@@ -27,7 +27,7 @@ struct kmem_cache {
        unsigned int limit;
        unsigned int shared;
 
-       unsigned int buffer_size;
+       unsigned int size;
        u32 reciprocal_buffer_size;
 /* 2) touched by every alloc & free from the backend */
 
@@ -52,7 +52,10 @@ struct kmem_cache {
 
 /* 4) cache creation/removal */
        const char *name;
-       struct list_head next;
+       struct list_head list;
+       int refcount;
+       int object_size;
+       int align;
 
 /* 5) statistics */
 #ifdef CONFIG_DEBUG_SLAB

I'm curious whether if you change line 505 in memory.c:

    502                 } else {
    503                         STRUCT_SIZE_INIT(kmem_cache_s, "kmem_cache");
    504                         MEMBER_OFFSET_INIT(kmem_cache_s_num, "kmem_cache", "num");
    505        =====>           MEMBER_OFFSET_INIT(kmem_cache_s_next, "kmem_cache", "next");
    506                         MEMBER_OFFSET_INIT(kmem_cache_s_name, "kmem_cache", "name");
    507                         MEMBER_OFFSET_INIT(kmem_cache_s_colour_off, "kmem_cache",
    508                                 "colour_off");

to this:

            MEMBER_OFFSET_INIT(kmem_cache_s_next, "kmem_cache", "list");

that it might work?

Worse case, you can work around it by using the "--no_kmem_cache" option
on the crash command line.

Thanks,
  Dave




More information about the Crash-utility mailing list