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: