7.0 panic in geom / ufs

Kostik Belousov kostikbel at gmail.com
Sat Apr 26 14:36:40 UTC 2008


On Sat, Apr 26, 2008 at 02:53:20PM +0100, Steven Hartland wrote:
> We have had the following panic now twice on one of our hosting
> boxes running 7.0-RELEASE (amd64)
> 
> >From a basic look around it seems that when running the following
> that provider (pp) is invalid.
> 364             g_trace(G_T_BIO, "bio_request(%p) from %p(%s) to %p(%s) cmd 
> %d",
> 365                 bp, cp, cp->geom->name, pp, pp->name, bp->bio_cmd);
> 
> Does anyone know their been any fixes in this area in stable that
> we should be applying?
> 
> The contributing factor here could be we have a single slice
> mounted several times read only in a number of jails?
Do you mean mounted directly. i.e. the same physical disk mounted
several times on different mount points ?

If yes, this cannot work (now). You shall use nullfs mounts to
get the desired behaviour.
> 
> 
> Fatal trap 12: page fault while in kernel mode
> cpuid = 1; apic id = 01
> fault virtual address   = 0x50006
> fault code              = supervisor read data, page not present
> instruction pointer     = 0x8:0xffffffff8023e3c6
> stack pointer           = 0x10:0xffffffffae39f7e0
> frame pointer           = 0x10:0xffffff00a18a5400
> code segment            = base 0x0, limit 0xfffff, type 0x1b
>                        = DPL 0, pres 1, long 1, def32 0, gran 1
> processor eflags        = interrupt enabled, resume, IOPL = 0
> current process         = 55130 (vim)
> trap number             = 12
> panic: page fault
> cpuid = 1
> Uptime: 40d17h22m13s
> Physical memory: 4088 MB
> Dumping 520 MB: 505 489 473 457 441 425 409 393 377 361 345 329 313 297 281 
> 265 249 233 217 201 185 169 153 137 121 105 89 73 57 41 25 9
> 
> #0  doadump () at pcpu.h:194
> 194             __asm __volatile("movq %%gs:0,%0" : "=r" (td));
> (kgdb) list *0x8:0xffffffff8023e3c6
> A syntax error in expression, near `:0xffffffff8023e3c6'.
> (kgdb) list *0xffffffff8023e3c6
> 0xffffffff8023e3c6 is in g_io_request (/usr/src/sys/geom/geom_io.c:364).
> 359                     KASSERT(bp->bio_length % cp->provider->sectorsize 
> == 0,
> 360                         ("wrong length %jd for sectorsize %u",
> 361                         bp->bio_length, cp->provider->sectorsize));
> 362             }
> 363
> 364             g_trace(G_T_BIO, "bio_request(%p) from %p(%s) to %p(%s) cmd 
> %d",
> 365                 bp, cp, cp->geom->name, pp, pp->name, bp->bio_cmd);
> 366
> 367             bp->bio_from = cp;
> 368             bp->bio_to = pp;
> (kgdb) bt
> #0  doadump () at pcpu.h:194
> #1  0x0000000000000004 in ?? ()
> #2  0xffffffff80288869 in boot (howto=260) at 
> /usr/src/sys/kern/kern_shutdown.c:409
> #3  0xffffffff80288c6d in panic (fmt=0x104 <Address 0x104 out of bounds>) 
> at /usr/src/sys/kern/kern_shutdown.c:563
> #4  0xffffffff803d6624 in trap_fatal (frame=0xffffff00713c79f0, 
> eva=18446742976103034880) at /usr/src/sys/amd64/amd64/trap.c:724
> #5  0xffffffff803d69f5 in trap_pfault (frame=0xffffffffae39f730, 
> usermode=0) at /usr/src/sys/amd64/amd64/trap.c:641
> #6  0xffffffff803d7338 in trap (frame=0xffffffffae39f730) at 
> /usr/src/sys/amd64/amd64/trap.c:410
> #7  0xffffffff803bcfae in calltrap () at 
> /usr/src/sys/amd64/amd64/exception.S:169
> #8  0xffffffff8023e3c6 in g_io_request (bp=0xffffff011c81d000, 
> cp=0xffffff00a18a5400) at /usr/src/sys/geom/geom_io.c:364
> #9  0xffffffff8038643f in ufs_strategy (ap=Variable "ap" is not available.
> ) at /usr/src/sys/ufs/ufs/ufs_vnops.c:1997
> #10 0xffffffff802e9ce9 in bufstrategy (bo=Variable "bo" is not available.
> ) at vnode_if.h:935
> #11 0xffffffff802f05b0 in breadn (vp=0xffffff001b1135d0, blkno=Variable 
> "blkno" is not available.
> ) at buf.h:429
> #12 0xffffffff802f064a in bread (vp=Variable "vp" is not available.
> ) at /usr/src/sys/kern/vfs_bio.c:734
> #13 0xffffffff8037c72a in ffs_read (ap=Variable "ap" is not available.
> ) at /usr/src/sys/ufs/ffs/ffs_vnops.c:531
> #14 0xffffffff80387913 in ufs_readdir (ap=0xffffffffae39fa70) at 
> vnode_if.h:344
> #15 0xffffffff8030d91f in getdirentries (td=0xffffff00713c79f0, 
> uap=0xffffffffae39fbe0) at vnode_if.h:747
> #16 0xffffffff803d6c77 in syscall (frame=0xffffffffae39fc70) at 
> /usr/src/sys/amd64/amd64/trap.c:852
> #17 0xffffffff803bd1bb in Xfast_syscall () at 
> /usr/src/sys/amd64/amd64/exception.S:290
> #18 0x00000008009a4c7c in ?? ()
> Previous frame inner to this frame (corrupt stack?)
> 
> (kgdb) up 8
> #8  0xffffffff8023e3c6 in g_io_request (bp=0xffffff006ae6f870, 
> cp=0xffffff0001b5ee00) at /usr/src/sys/geom/geom_io.c:364
> 364             g_trace(G_T_BIO, "bio_request(%p) from %p(%s) to %p(%s) cmd 
> %d",
> (kgdb) print bp
> $1 = (struct bio *) 0xffffff006ae6f870
> (kgdb) print *bp
> $2 = {bio_cmd = 1 '\001', bio_flags = 0 '\0', bio_cflags = 0 '\0', 
> bio_pflags = 0 '\0', bio_dev = 0x0, bio_disk = 0x0,
>  bio_offset = 8861696000, bio_bcount = 0, bio_data = 0xffffffffa52bb000 
>  "?\236???", bio_error = 0, bio_resid = 0,
>  bio_done = 0xffffffff80242560 <g_vfs_done>, bio_driver1 = 0x0, bio_driver2 
>  = 0x0, bio_caller1 = 0x0,
>  bio_caller2 = 0xffffffff9a0ac820, bio_queue = {tqe_next = 0x0, tqe_prev = 
>  0x0}, bio_attribute = 0x0, bio_from = 0x0,
>  bio_to = 0x0, bio_length = 16384, bio_completed = 0, bio_children = 0, 
>  bio_inbed = 0, bio_parent = 0x0, bio_t0 = {sec = 0,
>    frac = 0}, bio_task = 0, bio_task_arg = 0x0, bio_pblkno = 0}
> (kgdb) print cp
> $3 = (struct g_consumer *) 0xffffff0001b5ee00
> (kgdb) print *cp
> $4 = {geom = 0xffffff0001519ca0, consumer = {le_next = 0x0, le_prev = 
> 0xffffffff99c83cf8}, provider = 0x50006, consumers = {
>    le_next = 0xffffff0001b5e680, le_prev = 0xffffff00699900f8}, acr = 92, 
>    acw = 0, ace = 175272032, spoiled = 0, stat = 0x0,
>  nstart = 0, nend = 0, private = 0xffffff00699900c0, index = 28698240}
> (kgdb) print cp->geom
> $5 = (struct g_geom *) 0xffffff0001519ca0
> (kgdb) print *cp->geom
> $6 = {name = 0xffffffff80453365 "vfslock", class = 0xffffffff80453365, geom 
> = {le_next = 0x4390000, le_prev = 0x0}, consumer = {
>    lh_first = 0xffffffff805f7760}, provider = {lh_first = 0x0}, geoms = 
>    {tqe_next = 0x50000000000000, tqe_prev = 0x0}, rank = -1,
>  start = 0, spoiled = 0xffffffff80453354 <sun_noname+4740>, dumpconf = 
>  0xffffffff80453354 <sun_noname+4740>, access = 0x1030000,
>  orphan = 0, ioctl = 0x4, softc = 0x0, flags = 1}
> (kgdb) print *pp
> Cannot access memory at address 0x50006
> (kgdb) print pp
> $7 = (struct g_provider *) 0x50006 
> 
> 
> ================================================
> This e.mail is private and confidential between Multiplay (UK) Ltd. and the 
> person or entity to whom it is addressed. In the event of misdirection, the 
> recipient is prohibited from using, copying, printing or otherwise 
> disseminating it or any information contained in it. 
> In the event of misdirection, illegible or incomplete transmission please 
> telephone +44 845 868 1337
> or return the E.mail to postmaster at multiplay.co.uk.
> 
> _______________________________________________
> freebsd-stable at freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-stable
> To unsubscribe, send any mail to "freebsd-stable-unsubscribe at freebsd.org"
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 195 bytes
Desc: not available
Url : http://lists.freebsd.org/pipermail/freebsd-stable/attachments/20080426/c8bedc57/attachment.pgp


More information about the freebsd-stable mailing list