panic: bufwrite: buffer is not busy???

John Baldwin jhb at freebsd.org
Tue Feb 1 18:53:00 UTC 2011


On Tuesday, February 01, 2011 1:30:20 pm Eugene Grosbein wrote:
> On 31.01.2011 14:20, Julian Elischer wrote:
> 
> > replace with:
> > 
> > 3504            if ((hook == NULL) ||
> > 3505                NG_HOOK_NOT_VALID(hook) ||
> >                      ((peer = NG_HOOK_PEER(hook)) == NULL) ||
> > 3506                NG_HOOK_NOT_VALID(peer) ||
> >                      ((peernode = NG_PEER_NODE(hook)) == NULL) ||
> > 3507                NG_NODE_NOT_VALID(peernode)) {
> >                          if (peer)
> >                                kassert((peernode != NULL), ("peer node NULL wile peer hook exists"));
> > 3508                    NG_FREE_ITEM(item);
> 
> This day I have updated panicing router to RELENG_8 and combined changes supposed
> by Julian and Gleb. After 8 hours it has just paniced again and could not finish
> to write crashdump again:
> 
> Fatal trap 12: page fault while in kernel mode
> cpuid = 3; apic id = 06
> fault virtual address   = 0x63
> fault code              = supervisor read data, page not present
> instruction pointer     = 0x20:0xffffffff803d4ccd
> stack pointer           = 0x28:0xffffff80ebffc600
> frame pointer           = 0x28:0xffffff80ebffc680
> 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         = 2390 (mpd5)
> trap number             = 12
> panic: page fault
> cpuid = 3
> Uptime: 8h3m51s
> Dumping 4087 MB (3 chunks)
>   chunk 0: 1MB (150 pages) ... ok
>   chunk 1: 3575MB (915088 pages) 3559 3543panic: bufwrite: buffer is not busy???
> cpuid = 3
> Uptime: 8h3m52s
> Automatic reboot in 15 seconds - press a key on the console to abort
> 
> # gdb kernel
> 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 "amd64-marcel-freebsd"...
> (gdb) l *0xffffffff803d4ccd
> 0xffffffff803d4ccd is in ng_pppoe_disconnect (netgraph.h:191).
> 186                                     int line);
> 187
> 188     static __inline void
> 189     _chkhook(hook_p hook, char *file, int line)
> 190     {
> 191             if (hook->hk_magic != HK_MAGIC) {
> 192                     printf("Accessing freed hook ");
> 193                     dumphook(hook, file, line);
> 194             }
> 195             hook->lastline = line;
> (gdb) x/i 0xffffffff803d4ccd
> 0xffffffff803d4ccd <ng_pppoe_disconnect+301>:   cmpl   $0x78573011,0x64(%rbx)

So %rbx (hook) was -1 here.  Perhaps the locking is insufficient for whatever
structure contains the hook pointer?

-- 
John Baldwin


More information about the freebsd-net mailing list