Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 31 May 1998 18:37:18 -0400
From:      "Stephane E. Potvin" <sepotvin@videotron.ca>
To:        current@FreeBSD.ORG
Subject:   Softded panic
Message-ID:  <3571DB9E.2C392372@videotron.ca>

next in thread | raw e-mail | index | archive | help
Got the following panic trying to run a make release on my system

FreeBSD alexis.videotron.ca 3.0-CURRENT FreeBSD 3.0-CURRENT #0: Sat May
30 16:53:12 EDT 1998    
rubik@alexis.videotron.ca:/mnt/.2/FreeBSD/src/sys/compile/ALEXIS  i386

Pentium 166Mhz, 32M RAM

Here is the panic information:

GDB is free software and you are welcome to 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.
GDB 4.16 (i386-unknown-freebsd),
Copyright 1996 Free Software Foundation, Inc...
IdlePTD 225000
initial pcb at 1ffb04
panicstr: handle_written_inodeblock: live inodedep
panic messages:
---
panic: handle_written_inodeblock: live inodedep

syncing disks...

Fatal trap 12: page fault while in kernel mode
fault virtual address   = 0x30
fault code              = supervisor read, page not present
instruction pointer     = 0x8:0xf013183e
stack pointer           = 0x10:0xf01efdc4
frame pointer           = 0x10:0xf01efdd0
                        = DPL 0, pres 1, def32 1, gran 1
processor eflags        = interrupt enabled, resume, IOPL = 0
current process         = Idle
interrupt mask          = bio
trap number             = 12
panic: page fault

dumping to dev 20001, offset 196608
dump 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9
8 7 6 5
 4 3 2 1
---
#0  boot (howto=260) at ../../kern/kern_shutdown.c:281
281                                     dumppcb.pcb_cr3 = rcr3();
(kgdb) bt
#0  boot (howto=260) at ../../kern/kern_shutdown.c:281
#1  0xf01160c6 in panic (fmt=0xf01c221f "page fault")
    at ../../kern/kern_shutdown.c:421
#2  0xf01c2e6d in trap_fatal (frame=0xf01efd88) at
../../i386/i386/trap.c:879
#3  0xf01c2900 in trap_pfault (frame=0xf01efd88, usermode=0)
    at ../../i386/i386/trap.c:772
#4  0xf01c255f in trap (frame={tf_es = 16, tf_ds = 16, tf_edi = 0,
      tf_esi = -1073168320, tf_ebp = -266404400, tf_isp = -266404432,
      tf_ebx = -248261952, tf_edx = -1073168320, tf_ecx = -266404376,
      tf_eax = 0, tf_trapno = 12, tf_err = 0, tf_eip = -267184066, tf_cs
= 8,
      tf_eflags = 66118, tf_esp = -248261952, tf_ss = -248261872})
    at ../../i386/i386/trap.c:396
#5  0xf013183e in flushdirtybuffers (slpflag=0, slptimeo=0)
    at ../../kern/vfs_bio.c:1254
#6  0xf0130853 in bdwrite (bp=0xf133d2c0) at ../../kern/vfs_bio.c:512
#7  0xf0196841 in ffs_update (vp=0xf3242020, access=0xf01efe70,
    modify=0xf01efe70, waitfor=0) at ../../ufs/ffs/ffs_inode.c:132
#8  0xf019ee52 in ffs_sync (mp=0xf06c9800, waitfor=2, cred=0xf06c1e00,
    p=0xf0219088) at ../../ufs/ffs/ffs_vfsops.c:999
#9  0xf01393e3 in sync (p=0xf0219088, uap=0x0) at
../../kern/vfs_syscalls.c:517
#10 0xf0115cab in boot (howto=256) at ../../kern/kern_shutdown.c:203
#11 0xf01160c6 in panic (
    fmt=0xf019ba03 "handle_written_inodeblock: live inodedep")
    at ../../kern/kern_shutdown.c:421
#12 0xf019bccf in handle_written_inodeblock (inodedep=0xf087ea80,
    bp=0xf1317040) at ../../ufs/ffs/ffs_softdep.c:3240
#13 0xf019b4bb in softdep_disk_write_complete (bp=0xf1317040)
    at ../../ufs/ffs/ffs_softdep.c:2921
#14 0xf0132626 in biodone (bp=0xf1317040) at ../../kern/vfs_bio.c:1917
#15 0xf01e5411 in wdintr (unit=0) at ../../i386/isa/wd.c:1419
(kgdb) frame 12
#12 0xf019bccf in handle_written_inodeblock (inodedep=0xf087ea80,
    bp=0xf1317040) at ../../ufs/ffs/ffs_softdep.c:3240
3240                            panic("handle_written_inodeblock: live
inodedep"
);
(kgdb) print *inodedep
$1 = {id_list = {wk_list = {le_next = 0xf08c8e80, le_prev = 0xf1317164},
    wk_type = 1, wk_state = 13}, id_hash = {le_next = 0x0,
    le_prev = 0xf06ddc6c}, id_fs = 0xf06ee800, id_ino = 318372,
  id_nlinkdelta = 0, id_savedino = 0x0, id_deps = {le_next = 0xf0d71b80,
    le_prev = 0xf0c08c58}, id_buf = 0x0, id_savedsize =
0xffffffffffffffff,
  id_pendinghd = {lh_first = 0xf0803260}, id_bufwait = {lh_first = 0x0},
  id_inowait = {lh_first = 0x0}, id_inoupdt = {tqh_first = 0x0,
    tqh_last = 0xf087eac4}, id_newinoupdt = {tqh_first = 0x0,
    tqh_last = 0xf087eacc}}
(kgdb) print (struct diradd) *inodedep->id_pendinghd->lh_first
$2 = {da_list = {wk_list = {le_next = 0x0, le_prev = 0xf087eab8},
    wk_type = 10, wk_state = 32781}, da_pdlist = {le_next = 0xf08c4d40,
    le_prev = 0xf082b8ac}, da_offset = 60, da_newinum = 318372, da_un =
{
    dau_previous = 0xf0bf3a00, dau_pagedep = 0xf0bf3a00}}

Seems that a directory buffer hit the disk before the associated inode.
LIST_FIRST(&inodedep->id_pendinghd) != NULL when trying to free the
inodedep
after the buffer had been written to disk. 
If I'm completely wrong feel free to laugh but please point me where I'm
mistaken.

Is there a paper somewhere with more detailed informations on the inner
working of softupdates?

Regards

Stephane E. Potvin
POS and Industry Helpdesk
IBM Cadana Ltd.

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-current" in the body of the message



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?3571DB9E.2C392372>