Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 31 Jan 2011 08:52:48 -0800
From:      Julian Elischer <julian@freebsd.org>
To:        "Bjoern A. Zeeb" <bzeeb-lists@lists.zabbadoz.net>
Cc:        freebsd-net@freebsd.org, Eugene Grosbein <egrosbein@rdtc.ru>, Mike Tancsa <mike@sentex.net>
Subject:   Re: panic: bufwrite: buffer is not busy???
Message-ID:  <4D46E8E0.2030300@freebsd.org>
In-Reply-To: <20110131122926.C39951@maildrop.int.zabbadoz.net>
References:  <4D3011DB.9050900@frasunek.com> <4D30458D.30007@sentex.net> <4D309983.70709@rdtc.ru> <201101141437.55421.jhb@freebsd.org> <4D46575A.802@rdtc.ru> <4D4670C2.4050500@freebsd.org> <4D4685A0.6040400@rdtc.ru> <20110131122926.C39951@maildrop.int.zabbadoz.net>

next in thread | previous in thread | raw e-mail | index | archive | help
On 1/31/11 4:32 AM, Bjoern A. Zeeb wrote:
> 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.

slaps head...  kassert is at work....

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




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4D46E8E0.2030300>