Index: hfsc.c =================================================================== RCS file: /cvs/src/sys/net/hfsc.c,v retrieving revision 1.21 diff -u -p -r1.21 hfsc.c --- hfsc.c 18 Apr 2015 11:12:33 -0000 1.21 +++ hfsc.c 25 Sep 2015 11:42:37 -0000 @@ -646,17 +646,14 @@ hfsc_enqueue(struct ifqueue *ifq, struct if ((cl = hfsc_clh2cph(hif, m->m_pkthdr.pf.qid)) == NULL || cl->cl_children != NULL) { cl = hif->hif_defaultclass; - if (cl == NULL) { - m_freem(m); + if (cl == NULL) return (ENOBUFS); - } cl->cl_pktattr = NULL; } if (hfsc_addq(cl, m) != 0) { /* drop occurred. mbuf needs to be freed */ PKTCNTR_INC(&cl->cl_stats.drop_cnt, m->m_pkthdr.len); - m_freem(m); return (ENOBUFS); } ifq->ifq_len++; Index: if_var.h =================================================================== RCS file: /cvs/src/sys/net/if_var.h,v retrieving revision 1.43 diff -u -p -r1.43 if_var.h --- if_var.h 13 Sep 2015 17:53:44 -0000 1.43 +++ if_var.h 25 Sep 2015 11:42:37 -0000 @@ -330,15 +331,16 @@ do { \ (err) = hfsc_enqueue(((struct ifqueue *)(ifq)), m); \ else { \ if (IF_QFULL((ifq))) { \ - m_freem((m)); \ (err) = ENOBUFS; \ } else { \ IF_ENQUEUE((ifq), (m)); \ (err) = 0; \ } \ } \ - if ((err)) \ + if ((err)) { \ + m_freem((m)); \ (ifq)->ifq_drops++; \ + } \ } while (/* CONSTCOND */0) #define IFQ_DEQUEUE(ifq, m) \