Module Name:    src
Committed By:   knakahara
Date:           Mon Jun 20 06:46:38 UTC 2016

Modified Files:
        src/sys/dist/pf/net: pf.c
        src/sys/external/bsd/ipf/netinet: ip_fil_netbsd.c
        src/sys/net: bpf.c if_ecosubr.c if_mpls.c if_pppoe.c if_srt.c ppp_tty.c
        src/sys/net/agr: if_agr.c
        src/sys/netatalk: aarp.c ddp_output.c
        src/sys/netinet: if_arp.c ip_carp.c ip_flow.c ip_output.c
        src/sys/netinet6: ip6_flow.c nd6.c

Log Message:
apply if_output_lock() to L3 callers which call ifp->if_output() of L2(or L3 
tunneling).


To generate a diff of this commit:
cvs rdiff -u -r1.73 -r1.74 src/sys/dist/pf/net/pf.c
cvs rdiff -u -r1.14 -r1.15 src/sys/external/bsd/ipf/netinet/ip_fil_netbsd.c
cvs rdiff -u -r1.198 -r1.199 src/sys/net/bpf.c
cvs rdiff -u -r1.46 -r1.47 src/sys/net/if_ecosubr.c
cvs rdiff -u -r1.23 -r1.24 src/sys/net/if_mpls.c
cvs rdiff -u -r1.108 -r1.109 src/sys/net/if_pppoe.c
cvs rdiff -u -r1.21 -r1.22 src/sys/net/if_srt.c
cvs rdiff -u -r1.60 -r1.61 src/sys/net/ppp_tty.c
cvs rdiff -u -r1.35 -r1.36 src/sys/net/agr/if_agr.c
cvs rdiff -u -r1.36 -r1.37 src/sys/netatalk/aarp.c
cvs rdiff -u -r1.18 -r1.19 src/sys/netatalk/ddp_output.c
cvs rdiff -u -r1.211 -r1.212 src/sys/netinet/if_arp.c
cvs rdiff -u -r1.68 -r1.69 src/sys/netinet/ip_carp.c
cvs rdiff -u -r1.71 -r1.72 src/sys/netinet/ip_flow.c
cvs rdiff -u -r1.256 -r1.257 src/sys/netinet/ip_output.c
cvs rdiff -u -r1.26 -r1.27 src/sys/netinet6/ip6_flow.c
cvs rdiff -u -r1.195 -r1.196 src/sys/netinet6/nd6.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/dist/pf/net/pf.c
diff -u src/sys/dist/pf/net/pf.c:1.73 src/sys/dist/pf/net/pf.c:1.74
--- src/sys/dist/pf/net/pf.c:1.73	Fri Jun 10 13:27:15 2016
+++ src/sys/dist/pf/net/pf.c	Mon Jun 20 06:46:37 2016
@@ -1,4 +1,4 @@
-/*	$NetBSD: pf.c,v 1.73 2016/06/10 13:27:15 ozaki-r Exp $	*/
+/*	$NetBSD: pf.c,v 1.74 2016/06/20 06:46:37 knakahara Exp $	*/
 /*	$OpenBSD: pf.c,v 1.552.2.1 2007/11/27 16:37:57 henning Exp $ */
 
 /*
@@ -37,7 +37,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: pf.c,v 1.73 2016/06/10 13:27:15 ozaki-r Exp $");
+__KERNEL_RCSID(0, "$NetBSD: pf.c,v 1.74 2016/06/20 06:46:37 knakahara Exp $");
 
 #include "pflog.h"
 
@@ -5381,7 +5381,7 @@ pf_route(struct mbuf **m, struct pf_rule
 		else if (m0->m_pkthdr.csum_flags & M_UDPV4_CSUM_OUT)
 			udpstat.udps_outhwcsum++;
 #endif /* !__NetBSD__ */
-		error = (*ifp->if_output)(ifp, m0, dst, NULL);
+		error = if_output_lock(ifp, ifp, m0, dst, NULL);
 		goto done;
 	}
 

Index: src/sys/external/bsd/ipf/netinet/ip_fil_netbsd.c
diff -u src/sys/external/bsd/ipf/netinet/ip_fil_netbsd.c:1.14 src/sys/external/bsd/ipf/netinet/ip_fil_netbsd.c:1.15
--- src/sys/external/bsd/ipf/netinet/ip_fil_netbsd.c:1.14	Fri Jun 10 13:27:15 2016
+++ src/sys/external/bsd/ipf/netinet/ip_fil_netbsd.c	Mon Jun 20 06:46:37 2016
@@ -1,4 +1,4 @@
-/*	$NetBSD: ip_fil_netbsd.c,v 1.14 2016/06/10 13:27:15 ozaki-r Exp $	*/
+/*	$NetBSD: ip_fil_netbsd.c,v 1.15 2016/06/20 06:46:37 knakahara Exp $	*/
 
 /*
  * Copyright (C) 2012 by Darren Reed.
@@ -8,7 +8,7 @@
 #if !defined(lint)
 #if defined(__NetBSD__)
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ip_fil_netbsd.c,v 1.14 2016/06/10 13:27:15 ozaki-r Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ip_fil_netbsd.c,v 1.15 2016/06/20 06:46:37 knakahara Exp $");
 #else
 static const char sccsid[] = "@(#)ip_fil.c	2.41 6/5/96 (C) 1993-2000 Darren Reed";
 static const char rcsid[] = "@(#)Id: ip_fil_netbsd.c,v 1.1.1.2 2012/07/22 13:45:17 darrenr Exp";
@@ -1228,9 +1228,7 @@ ipf_fastroute(mb_t *m0, mb_t **mpp, fr_i
 			ip->ip_sum = in_cksum(m, hlen);
 # endif /* M_CSUM_IPv4 */
 
-		KERNEL_LOCK(1, NULL);
-		error = (*ifp->if_output)(ifp, m, dst, rt);
-		KERNEL_UNLOCK_ONE(NULL);
+		error = if_output_lock(ifp, ifp, m, dst, rt);
 		goto done;
 	}
 

Index: src/sys/net/bpf.c
diff -u src/sys/net/bpf.c:1.198 src/sys/net/bpf.c:1.199
--- src/sys/net/bpf.c:1.198	Fri Jun 10 13:31:44 2016
+++ src/sys/net/bpf.c	Mon Jun 20 06:46:37 2016
@@ -1,4 +1,4 @@
-/*	$NetBSD: bpf.c,v 1.198 2016/06/10 13:31:44 ozaki-r Exp $	*/
+/*	$NetBSD: bpf.c,v 1.199 2016/06/20 06:46:37 knakahara Exp $	*/
 
 /*
  * Copyright (c) 1990, 1991, 1993
@@ -39,7 +39,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: bpf.c,v 1.198 2016/06/10 13:31:44 ozaki-r Exp $");
+__KERNEL_RCSID(0, "$NetBSD: bpf.c,v 1.199 2016/06/20 06:46:37 knakahara Exp $");
 
 #if defined(_KERNEL_OPT)
 #include "opt_bpf.h"
@@ -723,7 +723,7 @@ bpf_write(struct file *fp, off_t *offp, 
 		mc = NULL;
 
 	s = splsoftnet();
-	error = (*ifp->if_output)(ifp, m, (struct sockaddr *) &dst, NULL);
+	error = if_output_lock(ifp, ifp, m, (struct sockaddr *) &dst, NULL);
 
 	if (mc != NULL) {
 		if (error == 0)

Index: src/sys/net/if_ecosubr.c
diff -u src/sys/net/if_ecosubr.c:1.46 src/sys/net/if_ecosubr.c:1.47
--- src/sys/net/if_ecosubr.c:1.46	Wed Apr 20 09:01:04 2016
+++ src/sys/net/if_ecosubr.c	Mon Jun 20 06:46:37 2016
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_ecosubr.c,v 1.46 2016/04/20 09:01:04 knakahara Exp $	*/
+/*	$NetBSD: if_ecosubr.c,v 1.47 2016/06/20 06:46:37 knakahara Exp $	*/
 
 /*-
  * Copyright (c) 2001 Ben Harris
@@ -58,7 +58,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_ecosubr.c,v 1.46 2016/04/20 09:01:04 knakahara Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_ecosubr.c,v 1.47 2016/06/20 06:46:37 knakahara Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_inet.h"
@@ -410,7 +410,7 @@ eco_input(struct ifnet *ifp, struct mbuf
 			/* dst->sa_len??? */
 			dst->sa_family = AF_UNSPEC;
 			memcpy(dst->sa_data, eh, ECO_HDR_LEN);
-			ifp->if_output(ifp, m, dst, NULL);
+			if_output_lock(ifp, ifp, m, dst, NULL);
 			return;
 		}
 		default:

Index: src/sys/net/if_mpls.c
diff -u src/sys/net/if_mpls.c:1.23 src/sys/net/if_mpls.c:1.24
--- src/sys/net/if_mpls.c:1.23	Fri Jun 10 13:31:44 2016
+++ src/sys/net/if_mpls.c	Mon Jun 20 06:46:37 2016
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_mpls.c,v 1.23 2016/06/10 13:31:44 ozaki-r Exp $ */
+/*	$NetBSD: if_mpls.c,v 1.24 2016/06/20 06:46:37 knakahara Exp $ */
 
 /*
  * Copyright (c) 2010 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_mpls.c,v 1.23 2016/06/10 13:31:44 ozaki-r Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_mpls.c,v 1.24 2016/06/20 06:46:37 knakahara Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_inet.h"
@@ -478,9 +478,7 @@ mpls_send_frame(struct mbuf *m, struct i
 #ifdef INET
 		ret = ip_if_output(ifp, m, rt->rt_gateway, rt);
 #else
-		KERNEL_LOCK(1, NULL);
-		ret =  (*ifp->if_output)(ifp, m, rt->rt_gateway, rt);
-		KERNEL_UNLOCK_ONE(NULL);
+		if_output_lock(ifp, ifp, m, rt->rt_gateway, rt);
 #endif
 		return ret;
 		break;

Index: src/sys/net/if_pppoe.c
diff -u src/sys/net/if_pppoe.c:1.108 src/sys/net/if_pppoe.c:1.109
--- src/sys/net/if_pppoe.c:1.108	Fri Jun 10 13:31:44 2016
+++ src/sys/net/if_pppoe.c	Mon Jun 20 06:46:37 2016
@@ -1,4 +1,4 @@
-/* $NetBSD: if_pppoe.c,v 1.108 2016/06/10 13:31:44 ozaki-r Exp $ */
+/* $NetBSD: if_pppoe.c,v 1.109 2016/06/20 06:46:37 knakahara Exp $ */
 
 /*-
  * Copyright (c) 2002, 2008 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_pppoe.c,v 1.108 2016/06/10 13:31:44 ozaki-r Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_pppoe.c,v 1.109 2016/06/20 06:46:37 knakahara Exp $");
 
 #include "pppoe.h"
 
@@ -880,7 +880,7 @@ pppoe_output(struct pppoe_softc *sc, str
 
 	m->m_flags &= ~(M_BCAST|M_MCAST);
 	sc->sc_sppp.pp_if.if_opackets++;
-	return sc->sc_eth_if->if_output(sc->sc_eth_if, m, &dst, NULL);
+	return if_output_lock(sc->sc_eth_if, sc->sc_eth_if, m, &dst, NULL);
 }
 
 static int
@@ -1377,7 +1377,7 @@ pppoe_send_padt(struct ifnet *outgoing_i
 	memcpy(&eh->ether_dhost, dest, ETHER_ADDR_LEN);
 
 	m0->m_flags &= ~(M_BCAST|M_MCAST);
-	return outgoing_if->if_output(outgoing_if, m0, &dst, NULL);
+	return if_output_lock(outgoing_if, outgoing_if, m0, &dst, NULL);
 }
 
 #ifdef PPPOE_SERVER

Index: src/sys/net/if_srt.c
diff -u src/sys/net/if_srt.c:1.21 src/sys/net/if_srt.c:1.22
--- src/sys/net/if_srt.c:1.21	Thu Apr 28 00:16:56 2016
+++ src/sys/net/if_srt.c	Mon Jun 20 06:46:37 2016
@@ -1,8 +1,8 @@
-/* $NetBSD: if_srt.c,v 1.21 2016/04/28 00:16:56 ozaki-r Exp $ */
+/* $NetBSD: if_srt.c,v 1.22 2016/06/20 06:46:37 knakahara Exp $ */
 /* This file is in the public domain. */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_srt.c,v 1.21 2016/04/28 00:16:56 ozaki-r Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_srt.c,v 1.22 2016/06/20 06:46:37 knakahara Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_inet.h"
@@ -232,7 +232,7 @@ srt_if_output(
 		return 0; /* XXX ENETDOWN? */
 	}
 	/* XXX is 0 the right last arg here? */
-	return (*r->u.dstifp->if_output)(r->u.dstifp,m,&r->dst.sa,0);
+	return if_output_lock(r->u.dstifp, r->u.dstifp, m, &r->dst.sa, 0);
 }
 
 static int

Index: src/sys/net/ppp_tty.c
diff -u src/sys/net/ppp_tty.c:1.60 src/sys/net/ppp_tty.c:1.61
--- src/sys/net/ppp_tty.c:1.60	Fri Jun 10 13:27:16 2016
+++ src/sys/net/ppp_tty.c	Mon Jun 20 06:46:37 2016
@@ -1,4 +1,4 @@
-/*	$NetBSD: ppp_tty.c,v 1.60 2016/06/10 13:27:16 ozaki-r Exp $	*/
+/*	$NetBSD: ppp_tty.c,v 1.61 2016/06/20 06:46:37 knakahara Exp $	*/
 /*	Id: ppp_tty.c,v 1.3 1996/07/01 01:04:11 paulus Exp 	*/
 
 /*
@@ -93,7 +93,7 @@
 /* from NetBSD: if_ppp.c,v 1.15.2.2 1994/07/28 05:17:58 cgd Exp */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ppp_tty.c,v 1.60 2016/06/10 13:27:16 ozaki-r Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ppp_tty.c,v 1.61 2016/06/20 06:46:37 knakahara Exp $");
 
 #include "ppp.h"
 
@@ -425,7 +425,7 @@ pppwrite(struct tty *tp, struct uio *uio
     dst.sa_family = AF_UNSPEC;
     bcopy(mtod(m0, u_char *), dst.sa_data, PPP_HDRLEN);
     m_adj(m0, PPP_HDRLEN);
-    return ((*sc->sc_if.if_output)(&sc->sc_if, m0, &dst, (struct rtentry *)0));
+    return if_output_lock(&sc->sc_if, &sc->sc_if, m0, &dst, (struct rtentry *)0);
 }
 
 /*

Index: src/sys/net/agr/if_agr.c
diff -u src/sys/net/agr/if_agr.c:1.35 src/sys/net/agr/if_agr.c:1.36
--- src/sys/net/agr/if_agr.c:1.35	Fri Jun 10 13:27:16 2016
+++ src/sys/net/agr/if_agr.c	Mon Jun 20 06:46:37 2016
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_agr.c,v 1.35 2016/06/10 13:27:16 ozaki-r Exp $	*/
+/*	$NetBSD: if_agr.c,v 1.36 2016/06/20 06:46:37 knakahara Exp $	*/
 
 /*-
  * Copyright (c)2005 YAMAMOTO Takashi,
@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_agr.c,v 1.35 2016/06/10 13:27:16 ozaki-r Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_agr.c,v 1.36 2016/06/20 06:46:37 knakahara Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_inet.h"
@@ -209,7 +209,7 @@ agr_xmit_frame(struct ifnet *ifp_port, s
 	m_copydata(m, 0, hdrlen, &dst->sa_data);
 	m_adj(m, hdrlen);
 
-	error = (*ifp_port->if_output)(ifp_port, m, dst, NULL);
+	error = if_output_lock(ifp_port, ifp_port, m, dst, NULL);
 
 	return error;
 }

Index: src/sys/netatalk/aarp.c
diff -u src/sys/netatalk/aarp.c:1.36 src/sys/netatalk/aarp.c:1.37
--- src/sys/netatalk/aarp.c:1.36	Tue Jan 31 09:53:44 2012
+++ src/sys/netatalk/aarp.c	Mon Jun 20 06:46:38 2016
@@ -1,4 +1,4 @@
-/*	$NetBSD: aarp.c,v 1.36 2012/01/31 09:53:44 hauke Exp $	*/
+/*	$NetBSD: aarp.c,v 1.37 2016/06/20 06:46:38 knakahara Exp $	*/
 
 /*
  * Copyright (c) 1990,1991 Regents of The University of Michigan.
@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: aarp.c,v 1.36 2012/01/31 09:53:44 hauke Exp $");
+__KERNEL_RCSID(0, "$NetBSD: aarp.c,v 1.37 2016/06/20 06:46:38 knakahara Exp $");
 
 #include "opt_mbuftrace.h"
 
@@ -238,7 +238,7 @@ aarpwhohas(struct ifnet *ifp, const stru
 
 	sa.sa_len = sizeof(struct sockaddr);
 	sa.sa_family = AF_UNSPEC;
-	(*ifp->if_output) (ifp, m, &sa, NULL);	/* XXX NULL should be routing */
+	if_output_lock(ifp, ifp, m, &sa, NULL);	/* XXX NULL should be routing */
 						/* information */
 }
 
@@ -429,7 +429,7 @@ at_aarpinput(struct ifnet *ifp, struct m
 			sat.sat_len = sizeof(struct sockaddr_at);
 			sat.sat_family = AF_APPLETALK;
 			sat.sat_addr = spa;
-			(*ifp->if_output)(ifp, aat->aat_hold,
+			if_output_lock(ifp, ifp, aat->aat_hold,
 			    (struct sockaddr *) & sat, NULL);	/* XXX */
 			aat->aat_hold = 0;
 		}

Index: src/sys/netatalk/ddp_output.c
diff -u src/sys/netatalk/ddp_output.c:1.18 src/sys/netatalk/ddp_output.c:1.19
--- src/sys/netatalk/ddp_output.c:1.18	Wed Jan 20 21:59:19 2016
+++ src/sys/netatalk/ddp_output.c	Mon Jun 20 06:46:38 2016
@@ -1,4 +1,4 @@
-/*	$NetBSD: ddp_output.c,v 1.18 2016/01/20 21:59:19 riastradh Exp $	 */
+/*	$NetBSD: ddp_output.c,v 1.19 2016/06/20 06:46:38 knakahara Exp $	 */
 
 /*
  * Copyright (c) 1990,1991 Regents of The University of Michigan.
@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ddp_output.c,v 1.18 2016/01/20 21:59:19 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ddp_output.c,v 1.19 2016/06/20 06:46:38 knakahara Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -203,5 +203,5 @@ ddp_route(struct mbuf *m, struct route *
 #endif
 		looutput(lo0ifp, copym, rtcache_getdst(ro), NULL);
 	}
-	return (*ifp->if_output)(ifp, m, (struct sockaddr *)&gate, NULL);
+	return if_output_lock(ifp, ifp, m, (struct sockaddr *)&gate, NULL);
 }

Index: src/sys/netinet/if_arp.c
diff -u src/sys/netinet/if_arp.c:1.211 src/sys/netinet/if_arp.c:1.212
--- src/sys/netinet/if_arp.c:1.211	Fri Jun 10 13:31:44 2016
+++ src/sys/netinet/if_arp.c	Mon Jun 20 06:46:38 2016
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_arp.c,v 1.211 2016/06/10 13:31:44 ozaki-r Exp $	*/
+/*	$NetBSD: if_arp.c,v 1.212 2016/06/20 06:46:38 knakahara Exp $	*/
 
 /*-
  * Copyright (c) 1998, 2000, 2008 The NetBSD Foundation, Inc.
@@ -68,7 +68,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_arp.c,v 1.211 2016/06/10 13:31:44 ozaki-r Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_arp.c,v 1.212 2016/06/20 06:46:38 knakahara Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_ddb.h"
@@ -674,7 +674,7 @@ arprequest(struct ifnet *ifp,
 	arps[ARP_STAT_SNDTOTAL]++;
 	arps[ARP_STAT_SENDREQUEST]++;
 	ARP_STAT_PUTREF();
-	(*ifp->if_output)(ifp, m, &sa, NULL);
+	if_output_lock(ifp, ifp, m, &sa, NULL);
 }
 
 /*
@@ -1251,7 +1251,7 @@ in_arpinput(struct mbuf *m)
 		for (; m_hold != NULL; m_hold = m_hold_next) {
 			m_hold_next = m_hold->m_nextpkt;
 			m_hold->m_nextpkt = NULL;
-			(*ifp->if_output)(ifp, m_hold, sintosa(&sin), NULL);
+			if_output_lock(ifp, ifp, m_hold, sintosa(&sin), NULL);
 		}
 	} else
 		LLE_WUNLOCK(la);
@@ -1334,7 +1334,7 @@ reply:
 	arps[ARP_STAT_SNDTOTAL]++;
 	arps[ARP_STAT_SNDREPLY]++;
 	ARP_STAT_PUTREF();
-	(*ifp->if_output)(ifp, m, &sa, NULL);
+	if_output_lock(ifp, ifp, m, &sa, NULL);
 	if (rcvif != NULL)
 		m_put_rcvif_psref(rcvif, &psref);
 	return;
@@ -1888,9 +1888,7 @@ revarprequest(struct ifnet *ifp)
 	sa.sa_len = 2;
 	m->m_flags |= M_BCAST;
 
-	KERNEL_LOCK(1, NULL);
-	(*ifp->if_output)(ifp, m, &sa, NULL);
-	KERNEL_UNLOCK_ONE(NULL);
+	if_output_lock(ifp, ifp, m, &sa, NULL);
 }
 
 /*

Index: src/sys/netinet/ip_carp.c
diff -u src/sys/netinet/ip_carp.c:1.68 src/sys/netinet/ip_carp.c:1.69
--- src/sys/netinet/ip_carp.c:1.68	Thu Jun 16 02:38:40 2016
+++ src/sys/netinet/ip_carp.c	Mon Jun 20 06:46:38 2016
@@ -1,4 +1,4 @@
-/*	$NetBSD: ip_carp.c,v 1.68 2016/06/16 02:38:40 ozaki-r Exp $	*/
+/*	$NetBSD: ip_carp.c,v 1.69 2016/06/20 06:46:38 knakahara Exp $	*/
 /*	$OpenBSD: ip_carp.c,v 1.113 2005/11/04 08:11:54 mcbride Exp $	*/
 
 /*
@@ -33,7 +33,7 @@
 #endif
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ip_carp.c,v 1.68 2016/06/16 02:38:40 ozaki-r Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ip_carp.c,v 1.69 2016/06/20 06:46:38 knakahara Exp $");
 
 /*
  * TODO:
@@ -2112,7 +2112,7 @@ carp_output(struct ifnet *ifp, struct mb
 	KASSERT(KERNEL_LOCKED_P());
 
 	if (sc->sc_carpdev != NULL && sc->sc_state == MASTER) {
-		return (sc->sc_carpdev->if_output(ifp, m, sa, rt));
+		return if_output_lock(sc->sc_carpdev, ifp, m, sa, rt));
 	} else {
 		m_freem(m);
 		return (ENETUNREACH);

Index: src/sys/netinet/ip_flow.c
diff -u src/sys/netinet/ip_flow.c:1.71 src/sys/netinet/ip_flow.c:1.72
--- src/sys/netinet/ip_flow.c:1.71	Mon Jun 13 08:37:15 2016
+++ src/sys/netinet/ip_flow.c	Mon Jun 20 06:46:38 2016
@@ -1,4 +1,4 @@
-/*	$NetBSD: ip_flow.c,v 1.71 2016/06/13 08:37:15 knakahara Exp $	*/
+/*	$NetBSD: ip_flow.c,v 1.72 2016/06/20 06:46:38 knakahara Exp $	*/
 
 /*-
  * Copyright (c) 1998 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ip_flow.c,v 1.71 2016/06/13 08:37:15 knakahara Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ip_flow.c,v 1.72 2016/06/20 06:46:38 knakahara Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -323,14 +323,12 @@ ipflow_fastforward(struct mbuf *m)
 	else
 		dst = rtcache_getdst(&ipf->ipf_ro);
 
-	KERNEL_LOCK(1, NULL);
-	if ((error = (*rt->rt_ifp->if_output)(rt->rt_ifp, m, dst, rt)) != 0) {
+	if ((error = if_output_lock(rt->rt_ifp, rt->rt_ifp, m, dst, rt)) != 0) {
 		if (error == ENOBUFS)
 			ipf->ipf_dropped++;
 		else
 			ipf->ipf_errors++;
 	}
-	KERNEL_UNLOCK_ONE(NULL);
 	ret = 1;
  out:
 	mutex_exit(&ipflow_lock);

Index: src/sys/netinet/ip_output.c
diff -u src/sys/netinet/ip_output.c:1.256 src/sys/netinet/ip_output.c:1.257
--- src/sys/netinet/ip_output.c:1.256	Fri Jun 10 13:27:16 2016
+++ src/sys/netinet/ip_output.c	Mon Jun 20 06:46:38 2016
@@ -1,4 +1,4 @@
-/*	$NetBSD: ip_output.c,v 1.256 2016/06/10 13:27:16 ozaki-r Exp $	*/
+/*	$NetBSD: ip_output.c,v 1.257 2016/06/20 06:46:38 knakahara Exp $	*/
 
 /*
  * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
@@ -91,7 +91,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ip_output.c,v 1.256 2016/06/10 13:27:16 ozaki-r Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ip_output.c,v 1.257 2016/06/20 06:46:38 knakahara Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_inet.h"
@@ -212,15 +212,8 @@ ip_if_output(struct ifnet * const ifp, s
 		return error;
 	}
 
-#ifndef NET_MPSAFE
-	KERNEL_LOCK(1, NULL);
-#endif
-
-	error = (*ifp->if_output)(ifp, m, dst, rt);
+	error = if_output_lock(ifp, ifp, m, dst, rt);
 
-#ifndef NET_MPSAFE
-	KERNEL_UNLOCK_ONE(NULL);
-#endif
 	return error;
 }
 

Index: src/sys/netinet6/ip6_flow.c
diff -u src/sys/netinet6/ip6_flow.c:1.26 src/sys/netinet6/ip6_flow.c:1.27
--- src/sys/netinet6/ip6_flow.c:1.26	Mon Jun 13 08:37:15 2016
+++ src/sys/netinet6/ip6_flow.c	Mon Jun 20 06:46:38 2016
@@ -1,4 +1,4 @@
-/*	$NetBSD: ip6_flow.c,v 1.26 2016/06/13 08:37:15 knakahara Exp $	*/
+/*	$NetBSD: ip6_flow.c,v 1.27 2016/06/20 06:46:38 knakahara Exp $	*/
 
 /*-
  * Copyright (c) 2007 The NetBSD Foundation, Inc.
@@ -38,7 +38,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ip6_flow.c,v 1.26 2016/06/13 08:37:15 knakahara Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ip6_flow.c,v 1.27 2016/06/20 06:46:38 knakahara Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -336,14 +336,12 @@ ip6flow_fastforward(struct mbuf **mp)
 
 	ip6f->ip6f_uses++;
 
-	KERNEL_LOCK(1, NULL);
 	/* Send on its way - straight to the interface output routine. */
-	if ((error = (*rt->rt_ifp->if_output)(rt->rt_ifp, m, dst, rt)) != 0) {
+	if ((error = if_output_lock(rt->rt_ifp, rt->rt_ifp, m, dst, rt)) != 0) {
 		ip6f->ip6f_dropped++;
 	} else {
 		ip6f->ip6f_forwarded++;
 	}
-	KERNEL_UNLOCK_ONE(NULL);
 	ret = 1;
  out:
 	mutex_exit(&ip6flow_lock);

Index: src/sys/netinet6/nd6.c
diff -u src/sys/netinet6/nd6.c:1.195 src/sys/netinet6/nd6.c:1.196
--- src/sys/netinet6/nd6.c:1.195	Wed May 18 11:28:44 2016
+++ src/sys/netinet6/nd6.c	Mon Jun 20 06:46:38 2016
@@ -1,4 +1,4 @@
-/*	$NetBSD: nd6.c,v 1.195 2016/05/18 11:28:44 ozaki-r Exp $	*/
+/*	$NetBSD: nd6.c,v 1.196 2016/06/20 06:46:38 knakahara Exp $	*/
 /*	$KAME: nd6.c,v 1.279 2002/06/08 11:16:51 itojun Exp $	*/
 
 /*
@@ -31,7 +31,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: nd6.c,v 1.195 2016/05/18 11:28:44 ozaki-r Exp $");
+__KERNEL_RCSID(0, "$NetBSD: nd6.c,v 1.196 2016/06/20 06:46:38 knakahara Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_net_mpsafe.h"
@@ -2291,16 +2291,10 @@ nd6_output(struct ifnet *ifp, struct ifn
 	if (ln != NULL)
 		LLE_WUNLOCK(ln);
 
-#ifndef NET_MPSAFE
-	KERNEL_LOCK(1, NULL);
-#endif
 	if ((ifp->if_flags & IFF_LOOPBACK) != 0)
-		error = (*ifp->if_output)(origifp, m, sin6tocsa(dst), rt);
+		error = if_output_lock(origifp, origifp, m, sin6tocsa(dst), rt);
 	else
-		error = (*ifp->if_output)(ifp, m, sin6tocsa(dst), rt);
-#ifndef NET_MPSAFE
-	KERNEL_UNLOCK_ONE(NULL);
-#endif
+		error = if_output_lock(ifp, ifp, m, sin6tocsa(dst), rt);
 	goto exit;
 
   bad:

Reply via email to