geom / lock page fault crashes

From: Mike Pritchard <mpp_at_FreeBSD.org>
Date: Thu, 2 Aug 2007 03:21:31 GMT
I'm seeing crashes every 15 mins - 2 hours with a -current kernel.

Its always a page fault in the witness check code, from GEOM (process is
always g_up), which I don't use at all (that I know of).  Its on a 
uni-processor system, and SMP is not compiled into the kernel.  I'm 
attempting to recompile a kernel without WITNESS enabled but I'm having a 
hard time getting the system to live long enough to even compile a kernel.
But its probably from some change in the last couple of weeks, since a kernel 
from before then was stable.

kgdb output is attached. Dump & kernel are available on freefall in
~mpp/crash, but I can provide more information if needed.

-Mike

Script started on Wed Aug  1 21:55:26 2007
mail 1#	kgdb kernel.53 vmcore.53
kgdb: kvm_nlist(_stopped_cpus): 
kgdb: kvm_nlist(_stoppcbs): 
[GDB will not be able to debug user-mode threads: /usr/lib/libthread_db.so: Undefined symbol "ps_pglobal_lookup"]
GNU gdb 6.1.1 [FreeBSD]
Copyright 2004 Free Software Foundation, Inc.
GDB 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.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "i386-marcel-freebsd".

Unread portion of the kernel message buffer:


Fatal trap 12: page fault while in kernel mode
fault virtual address	= 0x83004006
fault code		= supervisor read, page not present
instruction pointer	= 0x20:0xc0547a55
stack pointer	        = 0x28:0xcbb3cbb8
frame pointer	        = 0x28:0xcbb3cbf8
code segment		= base 0x0, limit 0xfffff, type 0x1b
			= DPL 0, pres 1, def32 1, gran 1
processor eflags	= interrupt enabled, resume, IOPL = 0
current process		= 3 (g_up)
trap number		= 12
panic: page fault
Uptime: 8m42s
Physical memory: 247 MB
Dumping 60 MB: 45 29 13

#0  doadump () at pcpu.h:195
195	pcpu.h: No such file or directory.
	in pcpu.h
(kgdb) bt
#0  doadump () at pcpu.h:195
#1  0xc05111be in boot (howto=260) at ../../../kern/kern_shutdown.c:409
#2  0xc051141c in panic (fmt=Variable "fmt" is not available.
) at ../../../kern/kern_shutdown.c:563
#3  0xc06a0a63 in trap_fatal (frame=0xcbb3cb78, eva=2197831686)
    at ../../../i386/i386/trap.c:872
#4  0xc06a0c53 in trap_pfault (frame=0xcbb3cb78, usermode=0, eva=2197831686)
    at ../../../i386/i386/trap.c:785
#5  0xc06a15e5 in trap (frame=0xcbb3cb78) at ../../../i386/i386/trap.c:463
#6  0xc068f70b in calltrap () at ../../../i386/i386/exception.s:139
#7  0xc0547a55 in witness_checkorder (lock=0xc073ebe8, flags=9, 
    file=0xc06ca5ae "../../../geom/geom_io.c", line=68)
    at ../../../kern/subr_witness.c:849
#8  0xc050607c in _mtx_lock_flags (m=0xc073ebe8, opts=0, 
    file=0xc06ca5ae "../../../geom/geom_io.c", line=68)
    at ../../../kern/kern_mutex.c:183
#9  0xc04c7959 in g_bioq_lock (bq=Variable "bq" is not available.
) at ../../../geom/geom_io.c:68
#10 0xc04c7ed6 in g_io_deliver (bp=0xc1eed480, error=0)
    at ../../../geom/geom_io.c:447
#11 0xc04ccaba in g_std_done (bp=0xc1e121b0) at ../../../geom/geom_subr.c:849
#12 0xc05732b9 in biodone (bp=0xc1e121b0) at ../../../kern/vfs_bio.c:3015
#13 0xc04c8657 in g_io_schedule_up (tp=0xc1cd9e00)
    at ../../../geom/geom_io.c:587
#14 0xc04c8e2d in g_up_procbody () at ../../../geom/geom_kern.c:95
#15 0xc04f3758 in fork_exit (callout=0xc04c8da0 <g_up_procbody>, arg=0x0, 
---Type <return> to continue, or q <return> to quit---
    frame=0xcbb3cd38) at ../../../kern/kern_fork.c:797
#16 0xc068f780 in fork_trampoline () at ../../../i386/i386/exception.s:205
(kgdb) up
#1  0xc05111be in boot (howto=260) at ../../../kern/kern_shutdown.c:409
409			doadump();
(kgdb) up
#2  0xc051141c in panic (fmt=Variable "fmt" is not available.
) at ../../../kern/kern_shutdown.c:563
563		boot(bootopt);
(kgdb) up
#3  0xc06a0a63 in trap_fatal (frame=0xcbb3cb78, eva=2197831686)
    at ../../../i386/i386/trap.c:872
872			panic("%s", trap_msg[type]);
(kgdb) up
#4  0xc06a0c53 in trap_pfault (frame=0xcbb3cb78, usermode=0, eva=2197831686)
    at ../../../i386/i386/trap.c:785
785			trap_fatal(frame, eva);
(kgdb) up
#5  0xc06a15e5 in trap (frame=0xcbb3cb78) at ../../../i386/i386/trap.c:463
463				(void) trap_pfault(frame, FALSE, eva);
(kgdb) up
#6  0xc068f70b in calltrap () at ../../../i386/i386/exception.s:139
139		call	trap
Current language:  auto; currently asm
(kgdb) up
#7  0xc0547a55 in witness_checkorder (lock=0xc073ebe8, flags=9, 
    file=0xc06ca5ae "../../../geom/geom_io.c", line=68)
    at ../../../kern/subr_witness.c:849
849		if (witness_cold || witness_watch == 0 || lock->lo_witness == NULL ||
Current language:  auto; currently c
(kgdb) list
844		struct lock_class *class;
845		struct witness *w, *w1;
846		struct thread *td;
847		int i, j;
848	
849		if (witness_cold || witness_watch == 0 || lock->lo_witness == NULL ||
850		    panicstr != NULL)
851			return;
852	
853		/*
(kgdb) print witness_cold
$1 = 0
(kgdb) print witness_watch
$2 = 1
(kgdb) print *lock
$3 = {lo_name = 0xc06c2381 "bio queue", lo_type = 0xc06c2381 "bio queue", 
  lo_flags = 16973824, lo_witness_data = {lod_list = {
      stqe_next = 0xc074d828}, lod_witness = 0xc074d828}}
(kgdb) print *lock->lo_witness_data->lod_witness
$4 = {w_name = 0xc06c2381 "bio queue", w_class = 0xc070c064, w_list = {
    stqe_next = 0xc074d850}, w_typelist = {stqe_next = 0xc074d850}, 
  w_children = 0x0, w_file = 0xc06ca5b7 "geom/geom_io.c", w_line = 68, 
  w_level = 0, w_refcount = 3, w_Giant_squawked = 0 '\0', 
  w_other_squawked = 0 '\0', w_same_squawked = 0 '\0', w_displayed = 0 '\0'}
(kgdb) quit
Received on Thu Aug 02 2007 - 01:21:32 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:39:15 UTC