bridge_ifenqueue() does not need any spl protection, if_output()
already raises it.
ok?
Index: net/if_bridge.c
===================================================================
RCS file: /cvs/src/sys/net/if_bridge.c,v
retrieving revision 1.241
diff -u -p -r1.241 if_bridge.c
--- net/if_bridge.c 8 Jun 2015 13:44:08 -0000 1.241
+++ net/if_bridge.c 8 Jun 2015 13:48:29 -0000
@@ -967,7 +967,7 @@ bridge_output(struct ifnet *ifp, struct
struct bridge_rtnode *dst_p = NULL;
struct ether_addr *dst;
struct bridge_softc *sc;
- int s, error, len;
+ int error, len;
/* ifp must be a member interface of the bridge. */
if (ifp->if_bridgeport == NULL) {
@@ -1072,9 +1072,7 @@ bridge_output(struct ifnet *ifp, struct
mc = m1;
}
- s = splnet();
error = bridge_ifenqueue(sc, dst_if, mc);
- splx(s);
if (error)
continue;
}
@@ -1093,9 +1091,7 @@ sendunicast:
m_freem(m);
return (ENETDOWN);
}
- s = splnet();
bridge_ifenqueue(sc, dst_if, m);
- splx(s);
return (0);
}
@@ -1135,12 +1131,12 @@ bridgeintr(void)
void
bridgeintr_frame(struct bridge_softc *sc, struct mbuf *m)
{
- int s, len;
struct ifnet *src_if, *dst_if;
struct bridge_iflist *ifl;
struct bridge_rtnode *dst_p;
struct ether_addr *dst, *src;
struct ether_header eh;
+ int len;
if ((sc->sc_if.if_flags & IFF_RUNNING) == 0) {
m_freem(m);
@@ -1293,9 +1289,7 @@ bridgeintr_frame(struct bridge_softc *sc
if ((len - ETHER_HDR_LEN) > dst_if->if_mtu)
bridge_fragment(sc, dst_if, &eh, m);
else {
- s = splnet();
bridge_ifenqueue(sc, dst_if, m);
- splx(s);
}
}
@@ -1499,7 +1493,7 @@ bridge_broadcast(struct bridge_softc *sc
struct bridge_iflist *p;
struct mbuf *mc;
struct ifnet *dst_if;
- int len, s, used = 0;
+ int len, used = 0;
TAILQ_FOREACH(p, &sc->sc_iflist, next) {
/*
@@ -1585,9 +1579,7 @@ bridge_broadcast(struct bridge_softc *sc
if ((len - ETHER_HDR_LEN) > dst_if->if_mtu)
bridge_fragment(sc, dst_if, eh, mc);
else {
- s = splnet();
bridge_ifenqueue(sc, dst_if, mc);
- splx(s);
}
}
@@ -1638,7 +1630,7 @@ bridge_span(struct bridge_softc *sc, str
struct bridge_iflist *p;
struct ifnet *ifp;
struct mbuf *mc, *m;
- int s, error;
+ int error;
if (TAILQ_EMPTY(&sc->sc_spanlist))
return;
@@ -1665,9 +1657,7 @@ bridge_span(struct bridge_softc *sc, str
continue;
}
- s = splnet();
error = bridge_ifenqueue(sc, ifp, mc);
- splx(s);
if (error)
continue;
}
@@ -2555,7 +2545,7 @@ bridge_fragment(struct bridge_softc *sc,
{
struct llc llc;
struct mbuf *m0;
- int s, error = 0;
+ int error = 0;
int hassnap = 0;
u_int16_t etype;
struct ip *ip;
@@ -2570,9 +2560,7 @@ bridge_fragment(struct bridge_softc *sc,
len += ETHER_VLAN_ENCAP_LEN;
if ((ifp->if_capabilities & IFCAP_VLAN_MTU) &&
(len - sizeof(struct ether_vlan_header) <= ifp->if_mtu)) {
- s = splnet();
bridge_ifenqueue(sc, ifp, m);
- splx(s);
return;
}
goto dropit;
@@ -2640,13 +2628,10 @@ bridge_fragment(struct bridge_softc *sc,
continue;
}
bcopy(eh, mtod(m, caddr_t), sizeof(*eh));
- s = splnet();
error = bridge_ifenqueue(sc, ifp, m);
if (error) {
- splx(s);
continue;
}
- splx(s);
} else
m_freem(m);
}