Count IFQ_ENQUEUE() failure as output drop.
authoruebayasi <uebayasi@openbsd.org>
Mon, 5 Oct 2015 15:57:27 +0000 (15:57 +0000)
committeruebayasi <uebayasi@openbsd.org>
Mon, 5 Oct 2015 15:57:27 +0000 (15:57 +0000)
mpi@ prefers checking IFQ_ENQUEUE() error, and this matches that.

OK dlg@

sys/net/if.c
sys/net/if_ppp.c
sys/net80211/ieee80211_pae_output.c

index 9fc4056..b513eb3 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: if.c,v 1.383 2015/10/05 15:39:01 uebayasi Exp $       */
+/*     $OpenBSD: if.c,v 1.384 2015/10/05 15:57:27 uebayasi Exp $       */
 /*     $NetBSD: if.c,v 1.35 1996/05/07 05:26:04 thorpej Exp $  */
 
 /*
@@ -577,6 +577,7 @@ if_enqueue(struct ifnet *ifp, struct mbuf *m)
         */
        IFQ_ENQUEUE(&ifp->if_snd, m, NULL, error);
        if (error) {
+               IF_DROP(&ifp->if_snd);
                splx(s);
                return (error);
        }
index 969206c..68570b3 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: if_ppp.c,v 1.87 2015/07/15 22:16:41 deraadt Exp $     */
+/*     $OpenBSD: if_ppp.c,v 1.88 2015/10/05 15:57:27 uebayasi Exp $    */
 /*     $NetBSD: if_ppp.c,v 1.39 1997/05/17 21:11:59 christos Exp $     */
 
 /*
@@ -803,11 +803,13 @@ pppoutput(struct ifnet *ifp, struct mbuf *m0, struct sockaddr *dst,
                IF_ENQUEUE(ifq, m0);
                error = 0;
            }
-       } else
+       } else {
            IFQ_ENQUEUE(&sc->sc_if.if_snd, m0, NULL, error);
+           if (error)
+               IF_DROP(&sc->sc_if.if_snd);
+       }
        if (error) {
            splx(s);
-           sc->sc_if.if_oerrors++;
            sc->sc_stats.ppp_oerrors++;
            return (error);
        }
@@ -866,10 +868,12 @@ ppp_requeue(struct ppp_softc *sc)
                    IF_ENQUEUE(ifq, m);
                    error = 0;
                }
-           } else
+           } else {
                IFQ_ENQUEUE(&sc->sc_if.if_snd, m, NULL, error);
+               if (error)
+                   IF_DROP(&sc->sc_if.if_snd);
+           }
            if (error) {
-               sc->sc_if.if_oerrors++;
                sc->sc_stats.ppp_oerrors++;
            }
            break;
index 826d56d..4e53465 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: ieee80211_pae_output.c,v 1.21 2015/09/16 20:24:12 stsp Exp $  */
+/*     $OpenBSD: ieee80211_pae_output.c,v 1.22 2015/10/05 15:57:27 uebayasi Exp $      */
 
 /*-
  * Copyright (c) 2007,2008 Damien Bergamini <damien.bergamini@free.fr>
@@ -131,7 +131,8 @@ ieee80211_send_eapol_key(struct ieee80211com *ic, struct mbuf *m,
                ifp->if_obytes += len;
                if ((ifp->if_flags & IFF_OACTIVE) == 0)
                        (*ifp->if_start)(ifp);
-       }
+       } else
+               IF_DROP(&ifp->if_snd);
        splx(s);
 
        return error;