panic: bufwrite: buffer is not busy???

Bjoern A. Zeeb bzeeb-lists at lists.zabbadoz.net
Mon Jan 31 12:35:08 UTC 2011


On Mon, 31 Jan 2011, Eugene Grosbein wrote:

> On 31.01.2011 14:20, Julian Elischer wrote:
>
>>> # 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 *0xffffffff803c1315
>>> 0xffffffff803c1315 is in ng_address_hook (/home/src/sys/netgraph/ng_base.c:3504).
>>> 3499             * Quick sanity check..
>>> 3500             * Since a hook holds a reference on it's node, once we know
>>> 3501             * that the peer is still connected (even if invalid,) we know
>>> 3502             * that the peer node is present, though maybe invalid.
>>> 3503             */
>>> 3504            if ((hook == NULL) ||
>>> 3505                NG_HOOK_NOT_VALID(hook) ||
>>> 3506                NG_HOOK_NOT_VALID(peer = NG_HOOK_PEER(hook)) ||
>>> 3507                NG_NODE_NOT_VALID(peernode = NG_PEER_NODE(hook))) {
>>> 3508                    NG_FREE_ITEM(item);
>>
>>
>> replace with:

which is essentially what I had suggested in the formerly mentioned PR
already (just remove the first printf macro).


>> 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);
>>


The problem is that it will not help to fix the race;  if you go
up in the same file you'll find another similar one of these checks
with a scary rev 1.1. (I think) comment (that you, Julian, should know
very well;-)

The solution that this needs is: proper locking.


> It does not compile:
>
> /home/src/sys/netgraph/ng_base.c: In function 'ng_address_hook':
> /home/src/sys/netgraph/ng_base.c:3511: warning: implicit declaration of function 'kassert'
> /home/src/sys/netgraph/ng_base.c:3511: warning: nested extern declaration of 'kassert'

yeah KASSERT is upper case.


> *** Error code 1
> 1 error
> *** Error code 2
> 1 error
> *** Error code 2
> 1 error
> _______________________________________________
> freebsd-net at freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-net
> To unsubscribe, send any mail to "freebsd-net-unsubscribe at freebsd.org"
>

-- 
Bjoern A. Zeeb                                 You have to have visions!
         <ks> Going to jail sucks -- <bz> All my daemons like it!
   http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/jails.html


More information about the freebsd-net mailing list