Author: kmacy
Date: Sat Dec 13 20:15:42 2008
New Revision: 186051
URL: http://svn.freebsd.org/changeset/base/186051

Log:
  in6_addroute is called through rnh_addadr which is always called with the 
radix node head lock held
  exclusively. Pass RTF_RNH_LOCKED to rtalloc so that rtalloc1_fib will not try 
to re-acquire the lock.

Modified:
  head/sys/netinet6/in6_rmx.c

Modified: head/sys/netinet6/in6_rmx.c
==============================================================================
--- head/sys/netinet6/in6_rmx.c Sat Dec 13 20:13:22 2008        (r186050)
+++ head/sys/netinet6/in6_rmx.c Sat Dec 13 20:15:42 2008        (r186051)
@@ -160,7 +160,7 @@ in6_addroute(void *v_arg, void *n_arg, s
                 * 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_RNH_LOCKED|RTF_CLONING);
                if (rt2) {
                        if (rt2->rt_flags & RTF_LLINFO &&
                                rt2->rt_flags & RTF_HOST &&
@@ -187,7 +187,7 @@ in6_addroute(void *v_arg, void *n_arg, s
                 *      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_RNH_LOCKED|RTF_CLONING);
                if (rt2) {
                        if ((rt2->rt_flags & (RTF_CLONING|RTF_HOST|RTF_GATEWAY))
                                        == RTF_CLONING
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to