Alexander,

Looks like this change introduced a bug. It was reported at pfSense and a 
ticket was opened at bugzilla:

https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=215122

> On 13 Jan 2016, at 12:32, Alexander V. Chernikov <melif...@freebsd.org> wrote:
> 
> Author: melifaro
> Date: Wed Jan 13 14:32:48 2016
> New Revision: 293829
> URL: https://svnweb.freebsd.org/changeset/base/293829
> 
> Log:
>  Remove RTF_RNH_LOCKED support from rtalloc1_fib().
> 
>  Last caller using it was eliminated in r293471.
> 
>  Sponsored by:        Yandex LLC
> 
> Modified:
>  head/sys/net/route.c
>  head/sys/net/route.h
> 
> Modified: head/sys/net/route.c
> ==============================================================================
> --- head/sys/net/route.c      Wed Jan 13 14:28:12 2016        (r293828)
> +++ head/sys/net/route.c      Wed Jan 13 14:32:48 2016        (r293829)
> @@ -409,7 +409,6 @@ rtalloc1_fib(struct sockaddr *dst, int r
>       struct rtentry *newrt;
>       struct rt_addrinfo info;
>       int err = 0, msgtype = RTM_MISS;
> -     int needlock;
> 
>       KASSERT((fibnum < rt_numfibs), ("rtalloc1_fib: bad fibnum"));
>       rnh = rt_tables_get_rnh(fibnum, dst->sa_family);
> @@ -420,23 +419,16 @@ rtalloc1_fib(struct sockaddr *dst, int r
>       /*
>        * Look up the address in the table for that Address Family
>        */
> -     needlock = !(ignflags & RTF_RNH_LOCKED);
> -     if (needlock)
> -             RADIX_NODE_HEAD_RLOCK(rnh);
> -#ifdef INVARIANTS    
> -     else
> -             RADIX_NODE_HEAD_LOCK_ASSERT(rnh);
> -#endif
> +     RADIX_NODE_HEAD_RLOCK(rnh);
>       rn = rnh->rnh_matchaddr(dst, rnh);
>       if (rn && ((rn->rn_flags & RNF_ROOT) == 0)) {
>               newrt = RNTORT(rn);
>               RT_LOCK(newrt);
>               RT_ADDREF(newrt);
> -             if (needlock)
> -                     RADIX_NODE_HEAD_RUNLOCK(rnh);
> -             goto done;
> +             RADIX_NODE_HEAD_RUNLOCK(rnh);
> +             return (newrt);
> 
> -     } else if (needlock)
> +     } else
>               RADIX_NODE_HEAD_RUNLOCK(rnh);
>       
>       /*
> @@ -456,10 +448,7 @@ miss:
>               bzero(&info, sizeof(info));
>               info.rti_info[RTAX_DST] = dst;
>               rt_missmsg_fib(msgtype, &info, 0, err, fibnum);
> -     }       
> -done:
> -     if (newrt)
> -             RT_LOCK_ASSERT(newrt);
> +     }
>       return (newrt);
> }
> 
> 
> Modified: head/sys/net/route.h
> ==============================================================================
> --- head/sys/net/route.h      Wed Jan 13 14:28:12 2016        (r293828)
> +++ head/sys/net/route.h      Wed Jan 13 14:32:48 2016        (r293829)
> @@ -175,7 +175,7 @@ struct rtentry {
>                                       /* 0x8000000 and up unassigned */
> #define       RTF_STICKY       0x10000000     /* always route dst->src */
> 
> -#define      RTF_RNH_LOCKED   0x40000000     /* radix node head is locked */
> +#define      RTF_RNH_LOCKED   0x40000000     /* unused */
> 
> #define       RTF_GWFLAG_COMPAT 0x80000000    /* a compatibility bit for 
> interacting
>                                          with existing routing apps */
> _______________________________________________
> svn-src-h...@freebsd.org mailing list
> https://lists.freebsd.org/mailman/listinfo/svn-src-head
> To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"



--
Renato Botelho

_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to