[PANIC] _rw_rlock (radix node head): wlock already held @ /usr/src/sys/net/route.c:291

Kip Macy kmacy at freebsd.org
Sat Dec 13 20:14:41 UTC 2008


Heh, that is the correct fix that I was about to commit.

Thanks,
Kip


On Sat, Dec 13, 2008 at 8:06 PM, Tor Egge <Tor.Egge at cvsup.no.freebsd.org> wrote:
>> I upgraded to CURRENT Dec 12 11pm and get this panic when ifconfig tries to
>> add an ipv6 route.
>
> I've gotten similar panics and am currently using the enclosed patch.
>
> - Tor Egge
>
> Index: sys/netinet/in_rmx.c
> ===================================================================
> RCS file: /home/ncvs/src/sys/netinet/in_rmx.c,v
> retrieving revision 1.65
> diff -u -r1.65 in_rmx.c
> --- sys/netinet/in_rmx.c        2 Dec 2008 21:37:28 -0000       1.65
> +++ sys/netinet/in_rmx.c        13 Dec 2008 15:43:33 -0000
> @@ -115,7 +115,7 @@
>                 * ARP entry and delete it if so.
>                 */
>                rt2 = in_rtalloc1((struct sockaddr *)sin, 0,
> -                   RTF_CLONING, rt->rt_fibnum);
> +                   RTF_CLONING | RTF_RNH_LOCKED, rt->rt_fibnum);
>                if (rt2) {
>                        if (rt2->rt_flags & RTF_LLINFO &&
>                            rt2->rt_flags & RTF_HOST &&
> Index: sys/netinet6/in6_rmx.c
> ===================================================================
> RCS file: /home/ncvs/src/sys/netinet6/in6_rmx.c,v
> retrieving revision 1.31
> diff -u -r1.31 in6_rmx.c
> --- sys/netinet6/in6_rmx.c      8 Dec 2008 00:28:21 -0000       1.31
> +++ sys/netinet6/in6_rmx.c      13 Dec 2008 19:51:18 -0000
> @@ -160,7 +160,8 @@
>                 * Find out if it is because of an
>                 * ARP entry and delete it if so.
>                 */
> -               rt2 = rtalloc1((struct sockaddr *)sin6, 0, RTF_CLONING);
> +               rt2 = rtalloc1((struct sockaddr *)sin6, 0,
> +                              RTF_CLONING | RTF_RNH_LOCKED);
>                if (rt2) {
>                        if (rt2->rt_flags & RTF_LLINFO &&
>                                rt2->rt_flags & RTF_HOST &&
> @@ -187,7 +188,8 @@
>                 *      net route entry, 3ffe:0501:: -> if0.
>                 *      This case should not raise an error.
>                 */
> -               rt2 = rtalloc1((struct sockaddr *)sin6, 0, RTF_CLONING);
> +               rt2 = rtalloc1((struct sockaddr *)sin6, 0,
> +                              RTF_CLONING | RTF_RNH_LOCKED);
>                if (rt2) {
>                        if ((rt2->rt_flags & (RTF_CLONING|RTF_HOST|RTF_GATEWAY))
>                                        == RTF_CLONING
>
>



-- 
If we desire respect for the law, we must first make the law respectable.
- Louis D. Brandeis


More information about the freebsd-current mailing list