svn commit: r359908 - head/sys/net
Andrew Gallatin
gallatin at FreeBSD.org
Mon Apr 13 23:06:56 UTC 2020
Author: gallatin
Date: Mon Apr 13 23:06:56 2020
New Revision: 359908
URL: https://svnweb.freebsd.org/changeset/base/359908
Log:
lagg: stop double-counting output errors and counting drops as errors
Before this change, lagg double-counted errors from lagg members, and counted
every drop by a lagg member as an error. Eg, if lagg sent a packet, and the
underlying hardware driver dropped it, a counter would be incremented by both
lagg and the underlying driver.
This change attempts to fix that by incrementing lagg's counters only for
errors that do not come from underlying drivers.
Reviewed by: hselasky, jhb
Sponsored by: Netflix
Differential Revision: https://reviews.freebsd.org/D24331
Modified:
head/sys/net/if_lagg.c
Modified: head/sys/net/if_lagg.c
==============================================================================
--- head/sys/net/if_lagg.c Mon Apr 13 22:21:01 2020 (r359907)
+++ head/sys/net/if_lagg.c Mon Apr 13 23:06:56 2020 (r359908)
@@ -1874,10 +1874,6 @@ lagg_transmit(struct ifnet *ifp, struct mbuf *m)
error = lagg_proto_start(sc, m);
LAGG_RUNLOCK();
-
- if (error != 0)
- if_inc_counter(ifp, IFCOUNTER_OERRORS, 1);
-
return (error);
}
@@ -2100,6 +2096,7 @@ lagg_rr_start(struct lagg_softc *sc, struct mbuf *m)
* port if the link is down or the port is NULL.
*/
if ((lp = lagg_link_active(sc, lp)) == NULL) {
+ if_inc_counter(sc->sc_ifp, IFCOUNTER_OERRORS, 1);
m_freem(m);
return (ENETDOWN);
}
@@ -2145,31 +2142,28 @@ lagg_bcast_start(struct lagg_softc *sc, struct mbuf *m
errors++;
break;
}
-
- ret = lagg_enqueue(last->lp_ifp, m0);
- if (ret != 0)
- errors++;
+ lagg_enqueue(last->lp_ifp, m0);
}
last = lp;
}
if (last == NULL) {
+ if_inc_counter(sc->sc_ifp, IFCOUNTER_OERRORS, 1);
m_freem(m);
return (ENOENT);
}
if ((last = lagg_link_active(sc, last)) == NULL) {
+ errors++;
+ if_inc_counter(sc->sc_ifp, IFCOUNTER_OERRORS, errors);
m_freem(m);
return (ENETDOWN);
}
ret = lagg_enqueue(last->lp_ifp, m);
- if (ret != 0)
- errors++;
+ if (errors != 0)
+ if_inc_counter(sc->sc_ifp, IFCOUNTER_OERRORS, errors);
- if (errors == 0)
- return (ret);
-
- return (0);
+ return (ret);
}
static struct mbuf*
@@ -2192,6 +2186,7 @@ lagg_fail_start(struct lagg_softc *sc, struct mbuf *m)
/* Use the master port if active or the next available port */
if ((lp = lagg_link_active(sc, sc->sc_primary)) == NULL) {
+ if_inc_counter(sc->sc_ifp, IFCOUNTER_OERRORS, 1);
m_freem(m);
return (ENETDOWN);
}
@@ -2315,6 +2310,7 @@ lagg_lb_start(struct lagg_softc *sc, struct mbuf *m)
* port if the link is down or the port is NULL.
*/
if ((lp = lagg_link_active(sc, lp)) == NULL) {
+ if_inc_counter(sc->sc_ifp, IFCOUNTER_OERRORS, 1);
m_freem(m);
return (ENETDOWN);
}
@@ -2386,6 +2382,7 @@ lagg_lacp_start(struct lagg_softc *sc, struct mbuf *m)
lp = lacp_select_tx_port(sc, m);
if (lp == NULL) {
+ if_inc_counter(sc->sc_ifp, IFCOUNTER_OERRORS, 1);
m_freem(m);
return (ENETDOWN);
}
More information about the svn-src-all
mailing list