On Wed, Mar 01, 2017 at 10:06:30PM +0100, Mike Belopuhov wrote: > I've realised that something like this would be nice for convenience, > but not crucial. I'd prefer not to pass the mbuf pointer, but there's > no decent way around it.
A new function that combines only three commands and that is only used once? That looks like too much abstraction. Wait until you have more uses cases. bluhm > > --- > sys/net/ifq.c | 12 +++++++++--- > sys/net/ifq.h | 1 + > 2 files changed, 10 insertions(+), 3 deletions(-) > > diff --git sys/net/ifq.c sys/net/ifq.c > index f678c2b01fd..ee302e99c3b 100644 > --- sys/net/ifq.c > +++ sys/net/ifq.c > @@ -330,10 +330,18 @@ ifq_dequeue(struct ifqueue *ifq) > ifq_deq_commit(ifq, m); > > return (m); > } > > +void > +ifq_drop(struct ifqueue *ifq, struct mbuf *m) > +{ > + m_freem(m); > + ifq->ifq_len--; > + ifq->ifq_qdrops++; > +} > + > unsigned int > ifq_purge(struct ifqueue *ifq) > { > struct mbuf_list ml = MBUF_LIST_INITIALIZER(); > unsigned int rv; > @@ -418,13 +426,11 @@ priq_enq(struct ifqueue *ifq, struct mbuf *m) > /* Find a lower priority queue to drop from */ > if (ifq_len(ifq) >= ifq->ifq_maxlen) { > for (prio = 0; prio < m->m_pkthdr.pf.prio; prio++) { > pl = &pq->pq_lists[prio]; > if (ml_len(pl) > 0) { > - m_freem(ml_dequeue(pl)); > - ifq->ifq_len--; > - ifq->ifq_qdrops++; > + ifq_drop(ifq, ml_dequeue(pl)); > break; > } > } > /* > * There's no lower priority queue that we can > diff --git sys/net/ifq.h sys/net/ifq.h > index 3a6891da6f6..df0193214c5 100644 > --- sys/net/ifq.h > +++ sys/net/ifq.h > @@ -345,10 +345,11 @@ int ifq_enqueue_try(struct ifqueue *, > struct mbuf *); > int ifq_enqueue(struct ifqueue *, struct mbuf *); > struct mbuf *ifq_deq_begin(struct ifqueue *); > void ifq_deq_commit(struct ifqueue *, struct mbuf *); > void ifq_deq_rollback(struct ifqueue *, struct mbuf *); > struct mbuf *ifq_dequeue(struct ifqueue *); > +void ifq_drop(struct ifqueue *, struct mbuf *); > unsigned int ifq_purge(struct ifqueue *); > void *ifq_q_enter(struct ifqueue *, const struct ifq_ops *); > void ifq_q_leave(struct ifqueue *, void *); > void ifq_serialize(struct ifqueue *, struct task *); > int ifq_is_serialized(struct ifqueue *); > -- > 2.12.0