svn commit: r307234 - in head/sys: netinet netinet6

Gleb Smirnoff glebius at FreeBSD.org
Thu Oct 13 20:15:48 UTC 2016


Author: glebius
Date: Thu Oct 13 20:15:47 2016
New Revision: 307234
URL: https://svnweb.freebsd.org/changeset/base/307234

Log:
  - Revert r300854, r303657 which tried to fix regression from r297225.
  - Fix the regression proper way using RO_RTFREE().
  
  Submitted by:	ae

Modified:
  head/sys/netinet/in_pcb.c
  head/sys/netinet/ip_output.c
  head/sys/netinet6/ip6_output.c

Modified: head/sys/netinet/in_pcb.c
==============================================================================
--- head/sys/netinet/in_pcb.c	Thu Oct 13 19:40:21 2016	(r307233)
+++ head/sys/netinet/in_pcb.c	Thu Oct 13 20:15:47 2016	(r307234)
@@ -1299,10 +1299,7 @@ in_pcbfree(struct inpcb *inp)
 	if (inp->inp_moptions != NULL)
 		inp_freemoptions(inp->inp_moptions);
 #endif
-	if (inp->inp_route.ro_rt) {
-		RTFREE(inp->inp_route.ro_rt);
-		inp->inp_route.ro_rt = (struct rtentry *)NULL;
-	}
+	RO_RTFREE(&inp->inp_route);
 	if (inp->inp_route.ro_lle)
 		LLE_FREE(inp->inp_route.ro_lle);	/* zeros ro_lle */
 
@@ -2242,10 +2239,7 @@ void
 in_losing(struct inpcb *inp)
 {
 
-	if (inp->inp_route.ro_rt) {
-		RTFREE(inp->inp_route.ro_rt);
-		inp->inp_route.ro_rt = (struct rtentry *)NULL;
-	}
+	RO_RTFREE(&inp->inp_route);
 	if (inp->inp_route.ro_lle)
 		LLE_FREE(inp->inp_route.ro_lle);	/* zeros ro_lle */
 	return;

Modified: head/sys/netinet/ip_output.c
==============================================================================
--- head/sys/netinet/ip_output.c	Thu Oct 13 19:40:21 2016	(r307233)
+++ head/sys/netinet/ip_output.c	Thu Oct 13 20:15:47 2016	(r307234)
@@ -704,11 +704,7 @@ sendit:
 		IPSTAT_INC(ips_fragmented);
 
 done:
-	/*
-	 * Release the route if using our private route, or if
-	 * (with flowtable) we don't have our own reference.
-	 */
-	if (ro == &iproute || ro->ro_flags & RT_NORTREF)
+	if (ro == &iproute)
 		RO_RTFREE(ro);
 	else if (rte == NULL)
 		/*

Modified: head/sys/netinet6/ip6_output.c
==============================================================================
--- head/sys/netinet6/ip6_output.c	Thu Oct 13 19:40:21 2016	(r307233)
+++ head/sys/netinet6/ip6_output.c	Thu Oct 13 20:15:47 2016	(r307234)
@@ -1064,12 +1064,7 @@ sendorfree:
 		IP6STAT_INC(ip6s_fragmented);
 
 done:
-	/*
-	 * Release the route if using our private route, or if
-	 * (with flowtable) we don't have our own reference.
-	 */
-	if (ro == &ip6route ||
-	    (ro != NULL && ro->ro_flags & RT_NORTREF))
+	if (ro == &ip6route)
 		RO_RTFREE(ro);
 	return (error);
 


More information about the svn-src-head mailing list