svn commit: r186051 - head/sys/netinet6

Kip Macy kmacy at FreeBSD.org
Sat Dec 13 20:15:43 UTC 2008


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


More information about the svn-src-all mailing list