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: