Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 10 Oct 2019 23:54:37 +0000 (UTC)
From:      Gleb Smirnoff <glebius@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r353426 - head/sys/net
Message-ID:  <201910102354.x9ANsbRZ090025@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: glebius
Date: Thu Oct 10 23:54:37 2019
New Revision: 353426
URL: https://svnweb.freebsd.org/changeset/base/353426

Log:
  Don't use if_maddr_rlock() in sppp(4), use epoch(9) directly instead.

Modified:
  head/sys/net/if_spppsubr.c

Modified: head/sys/net/if_spppsubr.c
==============================================================================
--- head/sys/net/if_spppsubr.c	Thu Oct 10 23:51:14 2019	(r353425)
+++ head/sys/net/if_spppsubr.c	Thu Oct 10 23:54:37 2019	(r353426)
@@ -4818,6 +4818,7 @@ out:
 void
 sppp_get_ip_addrs(struct sppp *sp, u_long *src, u_long *dst, u_long *srcmask)
 {
+	struct epoch_tracker et;
 	struct ifnet *ifp = SP2IFP(sp);
 	struct ifaddr *ifa;
 	struct sockaddr_in *si, *sm;
@@ -4830,7 +4831,7 @@ sppp_get_ip_addrs(struct sppp *sp, u_long *src, u_long
 	 * aliases don't make any sense on a p2p link anyway.
 	 */
 	si = NULL;
-	if_addr_rlock(ifp);
+	NET_EPOCH_ENTER(et);
 	CK_STAILQ_FOREACH(ifa, &ifp->if_addrhead, ifa_link)
 		if (ifa->ifa_addr->sa_family == AF_INET) {
 			si = (struct sockaddr_in *)ifa->ifa_addr;
@@ -4849,7 +4850,7 @@ sppp_get_ip_addrs(struct sppp *sp, u_long *src, u_long
 		if (si && si->sin_addr.s_addr)
 			ddst = si->sin_addr.s_addr;
 	}
-	if_addr_runlock(ifp);
+	NET_EPOCH_EXIT(et);
 
 	if (dst) *dst = ntohl(ddst);
 	if (src) *src = ntohl(ssrc);
@@ -4863,6 +4864,7 @@ static void
 sppp_set_ip_addr(struct sppp *sp, u_long src)
 {
 	STDDCL;
+	struct epoch_tracker et;
 	struct ifaddr *ifa;
 	struct sockaddr_in *si;
 	struct in_ifaddr *ia;
@@ -4872,7 +4874,7 @@ sppp_set_ip_addr(struct sppp *sp, u_long src)
 	 * aliases don't make any sense on a p2p link anyway.
 	 */
 	si = NULL;
-	if_addr_rlock(ifp);
+	NET_EPOCH_ENTER(et);
 	CK_STAILQ_FOREACH(ifa, &ifp->if_addrhead, ifa_link) {
 		if (ifa->ifa_addr->sa_family == AF_INET) {
 			si = (struct sockaddr_in *)ifa->ifa_addr;
@@ -4882,7 +4884,7 @@ sppp_set_ip_addr(struct sppp *sp, u_long src)
 			}
 		}
 	}
-	if_addr_runlock(ifp);
+	NET_EPOCH_EXIT(et);
 
 	if (ifa != NULL) {
 		int error;
@@ -4921,6 +4923,7 @@ static void
 sppp_get_ip6_addrs(struct sppp *sp, struct in6_addr *src, struct in6_addr *dst,
 		   struct in6_addr *srcmask)
 {
+	struct epoch_tracker et;
 	struct ifnet *ifp = SP2IFP(sp);
 	struct ifaddr *ifa;
 	struct sockaddr_in6 *si, *sm;
@@ -4934,7 +4937,7 @@ sppp_get_ip6_addrs(struct sppp *sp, struct in6_addr *s
 	 * aliases don't make any sense on a p2p link anyway.
 	 */
 	si = NULL;
-	if_addr_rlock(ifp);
+	NET_EPOCH_ENTER(et);
 	CK_STAILQ_FOREACH(ifa, &ifp->if_addrhead, ifa_link)
 		if (ifa->ifa_addr->sa_family == AF_INET6) {
 			si = (struct sockaddr_in6 *)ifa->ifa_addr;
@@ -4960,7 +4963,7 @@ sppp_get_ip6_addrs(struct sppp *sp, struct in6_addr *s
 		bcopy(&ddst, dst, sizeof(*dst));
 	if (src)
 		bcopy(&ssrc, src, sizeof(*src));
-	if_addr_runlock(ifp);
+	NET_EPOCH_EXIT(et);
 }
 
 #ifdef IPV6CP_MYIFID_DYN
@@ -4980,6 +4983,7 @@ static void
 sppp_set_ip6_addr(struct sppp *sp, const struct in6_addr *src)
 {
 	STDDCL;
+	struct epoch_tracker et;
 	struct ifaddr *ifa;
 	struct sockaddr_in6 *sin6;
 
@@ -4989,7 +4993,7 @@ sppp_set_ip6_addr(struct sppp *sp, const struct in6_ad
 	 */
 
 	sin6 = NULL;
-	if_addr_rlock(ifp);
+	NET_EPOCH_ENTER(et);
 	CK_STAILQ_FOREACH(ifa, &ifp->if_addrhead, ifa_link) {
 		if (ifa->ifa_addr->sa_family == AF_INET6) {
 			sin6 = (struct sockaddr_in6 *)ifa->ifa_addr;
@@ -4999,7 +5003,7 @@ sppp_set_ip6_addr(struct sppp *sp, const struct in6_ad
 			}
 		}
 	}
-	if_addr_runlock(ifp);
+	NET_EPOCH_EXIT(et);
 
 	if (ifa != NULL) {
 		int error;



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201910102354.x9ANsbRZ090025>