aboutsummaryrefslogtreecommitdiff
path: root/sys/net
diff options
context:
space:
mode:
authorGleb Smirnoff <glebius@FreeBSD.org>2014-09-19 09:01:19 +0000
committerGleb Smirnoff <glebius@FreeBSD.org>2014-09-19 09:01:19 +0000
commit56b61ca27ace61b1f30aaeb54138d8114df56d00 (patch)
tree2346dc2a57057cf36e1f65ce69915934b9e9b825 /sys/net
parent35163b6c157757c0b30811a9d9b03ff8b790de0e (diff)
downloadsrc-56b61ca27ace61b1f30aaeb54138d8114df56d00.tar.gz
src-56b61ca27ace61b1f30aaeb54138d8114df56d00.zip
Remove ifq_drops from struct ifqueue. Now queue drops are accounted in
struct ifnet if_oqdrops. Some netgraph modules used ifqueue w/o ifnet. Accounting of queue drops is simply removed from them. There were no API to read this statistic. Sponsored by: Netflix Sponsored by: Nginx, Inc.
Notes
Notes: svn path=/head/; revision=271856
Diffstat (limited to 'sys/net')
-rw-r--r--sys/net/if.c2
-rw-r--r--sys/net/if_debug.c1
-rw-r--r--sys/net/if_epair.c2
-rw-r--r--sys/net/if_mib.c3
-rw-r--r--sys/net/ifq.h10
-rw-r--r--sys/net/rtsock.c6
6 files changed, 8 insertions, 16 deletions
diff --git a/sys/net/if.c b/sys/net/if.c
index 0f33726e5d6e..1b41b7e56155 100644
--- a/sys/net/if.c
+++ b/sys/net/if.c
@@ -3521,8 +3521,8 @@ if_handoff(struct ifqueue *ifq, struct mbuf *m, struct ifnet *ifp, int adjust)
IF_LOCK(ifq);
if (_IF_QFULL(ifq)) {
- _IF_DROP(ifq);
IF_UNLOCK(ifq);
+ ifp->if_oqdrops++;
m_freem(m);
return (0);
}
diff --git a/sys/net/if_debug.c b/sys/net/if_debug.c
index e731937462c9..1d198eb925f2 100644
--- a/sys/net/if_debug.c
+++ b/sys/net/if_debug.c
@@ -79,7 +79,6 @@ if_show_ifnet(struct ifnet *ifp)
IF_DB_PRINTF("%p", if_snd.ifq_tail);
IF_DB_PRINTF("%d", if_snd.ifq_len);
IF_DB_PRINTF("%d", if_snd.ifq_maxlen);
- IF_DB_PRINTF("%d", if_snd.ifq_drops);
IF_DB_PRINTF("%p", if_snd.ifq_drv_head);
IF_DB_PRINTF("%p", if_snd.ifq_drv_tail);
IF_DB_PRINTF("%d", if_snd.ifq_drv_len);
diff --git a/sys/net/if_epair.c b/sys/net/if_epair.c
index 3c5c94ed3e81..fd1120c41ff0 100644
--- a/sys/net/if_epair.c
+++ b/sys/net/if_epair.c
@@ -517,7 +517,7 @@ epair_transmit_locked(struct ifnet *ifp, struct mbuf *m)
if (ALTQ_IS_ENABLED(&ifp->if_snd)) {
ALTQ_ENQUEUE(&ifp->if_snd, m, NULL, error);
if (error)
- ifp->if_snd.ifq_drops++;
+ ifp->if_oqdrops++;
IF_UNLOCK(&ifp->if_snd);
if (!error) {
ifp->if_obytes += len;
diff --git a/sys/net/if_mib.c b/sys/net/if_mib.c
index 3c90235aa043..b6d245a7aa8f 100644
--- a/sys/net/if_mib.c
+++ b/sys/net/if_mib.c
@@ -105,7 +105,8 @@ sysctl_ifdata(SYSCTL_HANDLER_ARGS) /* XXX bad syntax! */
ifmd.ifmd_flags = ifp->if_flags | ifp->if_drv_flags;
ifmd.ifmd_snd_len = ifp->if_snd.ifq_len;
ifmd.ifmd_snd_maxlen = ifp->if_snd.ifq_maxlen;
- ifmd.ifmd_snd_drops = ifp->if_snd.ifq_drops;
+ ifmd.ifmd_snd_drops =
+ ifp->if_get_counter(ifp, IFCOUNTER_OQDROPS);
error = SYSCTL_OUT(req, &ifmd, sizeof ifmd);
if (error)
diff --git a/sys/net/ifq.h b/sys/net/ifq.h
index cf0c5066fea1..b787ea1cfa81 100644
--- a/sys/net/ifq.h
+++ b/sys/net/ifq.h
@@ -53,7 +53,6 @@ struct ifqueue {
struct mbuf *ifq_tail;
int ifq_len;
int ifq_maxlen;
- int ifq_drops;
struct mtx ifq_mtx;
};
@@ -68,7 +67,6 @@ struct ifqueue {
#define IF_UNLOCK(ifq) mtx_unlock(&(ifq)->ifq_mtx)
#define IF_LOCK_ASSERT(ifq) mtx_assert(&(ifq)->ifq_mtx, MA_OWNED)
#define _IF_QFULL(ifq) ((ifq)->ifq_len >= (ifq)->ifq_maxlen)
-#define _IF_DROP(ifq) ((ifq)->ifq_drops++)
#define _IF_QLEN(ifq) ((ifq)->ifq_len)
#define _IF_ENQUEUE(ifq, m) do { \
@@ -171,8 +169,6 @@ do { \
(err) = 0; \
} \
} \
- if (err) \
- (ifq)->ifq_drops++; \
IF_UNLOCK(ifq); \
} while (0)
@@ -234,7 +230,6 @@ do { \
#define IFQ_IS_EMPTY(ifq) ((ifq)->ifq_len == 0)
#define IFQ_INC_LEN(ifq) ((ifq)->ifq_len++)
#define IFQ_DEC_LEN(ifq) (--(ifq)->ifq_len)
-#define IFQ_INC_DROPS(ifq) ((ifq)->ifq_drops++)
#define IFQ_SET_MAXLEN(ifq, len) ((ifq)->ifq_maxlen = (len))
/*
@@ -255,7 +250,8 @@ do { \
(ifp)->if_omcasts++; \
if (((ifp)->if_drv_flags & IFF_DRV_OACTIVE) == 0) \
if_start(ifp); \
- } \
+ } else \
+ ifp->if_oqdrops++; \
} while (0)
#define IFQ_HANDOFF(ifp, m, err) \
@@ -321,6 +317,8 @@ drbr_enqueue(struct ifnet *ifp, struct buf_ring *br, struct mbuf *m)
#ifdef ALTQ
if (ALTQ_IS_ENABLED(&ifp->if_snd)) {
IFQ_ENQUEUE(&ifp->if_snd, m, error);
+ if (error)
+ ifp->if_oqdrops++;
return (error);
}
#endif
diff --git a/sys/net/rtsock.c b/sys/net/rtsock.c
index a4d8148be3ce..6fcbbc6ec431 100644
--- a/sys/net/rtsock.c
+++ b/sys/net/rtsock.c
@@ -1577,9 +1577,6 @@ sysctl_iflist_ifml(struct ifnet *ifp, struct rt_addrinfo *info,
if_data_copy(ifp, ifd);
- /* Some drivers still use ifqueue(9), add its stats. */
- ifd->ifi_oqdrops += ifp->if_snd.ifq_drops;
-
return (SYSCTL_OUT(w->w_req, (caddr_t)ifm, len));
}
@@ -1612,9 +1609,6 @@ sysctl_iflist_ifm(struct ifnet *ifp, struct rt_addrinfo *info,
if_data_copy(ifp, ifd);
- /* Some drivers still use ifqueue(9), add its stats. */
- ifd->ifi_oqdrops += ifp->if_snd.ifq_drops;
-
return (SYSCTL_OUT(w->w_req, (caddr_t)ifm, len));
}