svn commit: r289165 - in head/sys: dev/ath dev/bwi dev/bwn dev/iwm dev/iwn dev/malo dev/mwl dev/otus dev/ral dev/usb/wlan dev/wi dev/wpi net80211

Adrian Chadd adrian at FreeBSD.org
Mon Oct 12 04:55:24 UTC 2015


Author: adrian
Date: Mon Oct 12 04:55:20 2015
New Revision: 289165
URL: https://svnweb.freebsd.org/changeset/base/289165

Log:
  net80211: move ieee80211_free_node() call on error from ic_raw_xmit() to ieee80211_raw_output().
  
  This doesn't free the mbuf upon error; the driver ic_raw_xmit method is still
  doing that.
  
  Submitted by:	<s3erios at gmail.com>
  Differential Revision:	https://reviews.freebsd.org/D3774

Modified:
  head/sys/dev/ath/if_ath_tx.c
  head/sys/dev/bwi/if_bwi.c
  head/sys/dev/bwn/if_bwn.c
  head/sys/dev/iwm/if_iwm.c
  head/sys/dev/iwn/if_iwn.c
  head/sys/dev/malo/if_malo.c
  head/sys/dev/mwl/if_mwl.c
  head/sys/dev/otus/if_otus.c
  head/sys/dev/ral/rt2560.c
  head/sys/dev/ral/rt2661.c
  head/sys/dev/ral/rt2860.c
  head/sys/dev/usb/wlan/if_rsu.c
  head/sys/dev/usb/wlan/if_rum.c
  head/sys/dev/usb/wlan/if_run.c
  head/sys/dev/usb/wlan/if_uath.c
  head/sys/dev/usb/wlan/if_upgt.c
  head/sys/dev/usb/wlan/if_ural.c
  head/sys/dev/usb/wlan/if_urtw.c
  head/sys/dev/usb/wlan/if_urtwn.c
  head/sys/dev/usb/wlan/if_zyd.c
  head/sys/dev/wi/if_wi.c
  head/sys/dev/wpi/if_wpi.c
  head/sys/net80211/ieee80211_output.c

Modified: head/sys/dev/ath/if_ath_tx.c
==============================================================================
--- head/sys/dev/ath/if_ath_tx.c	Mon Oct 12 04:30:38 2015	(r289164)
+++ head/sys/dev/ath/if_ath_tx.c	Mon Oct 12 04:55:20 2015	(r289165)
@@ -2452,7 +2452,6 @@ badbad:
 	ATH_KTR(sc, ATH_KTR_TX, 2, "ath_raw_xmit: bad0: m=%p, params=%p",
 	    m, params);
 	sc->sc_stats.ast_tx_raw_fail++;
-	ieee80211_free_node(ni);
 
 	return error;
 }

Modified: head/sys/dev/bwi/if_bwi.c
==============================================================================
--- head/sys/dev/bwi/if_bwi.c	Mon Oct 12 04:30:38 2015	(r289164)
+++ head/sys/dev/bwi/if_bwi.c	Mon Oct 12 04:55:20 2015	(r289165)
@@ -1399,7 +1399,6 @@ bwi_raw_xmit(struct ieee80211_node *ni, 
 	int idx, error;
 
 	if ((sc->sc_flags & BWI_F_RUNNING) == 0) {
-		ieee80211_free_node(ni);
 		m_freem(m);
 		return ENETDOWN;
 	}
@@ -1424,9 +1423,7 @@ bwi_raw_xmit(struct ieee80211_node *ni, 
 		tbd->tbd_used++;
 		tbd->tbd_idx = (idx + 1) % BWI_TX_NDESC;
 		sc->sc_tx_timer = 5;
-	} else
-		/* NB: m is reclaimed on encap failure */
-		ieee80211_free_node(ni);
+	}
 	BWI_UNLOCK(sc);
 	return error;
 }

Modified: head/sys/dev/bwn/if_bwn.c
==============================================================================
--- head/sys/dev/bwn/if_bwn.c	Mon Oct 12 04:30:38 2015	(r289164)
+++ head/sys/dev/bwn/if_bwn.c	Mon Oct 12 04:55:20 2015	(r289165)
@@ -2684,29 +2684,26 @@ bwn_raw_xmit(struct ieee80211_node *ni, 
 	struct ieee80211com *ic = ni->ni_ic;
 	struct bwn_softc *sc = ic->ic_softc;
 	struct bwn_mac *mac = sc->sc_curmac;
+	int error;
 
 	if ((sc->sc_flags & BWN_FLAG_RUNNING) == 0 ||
 	    mac->mac_status < BWN_MAC_STATUS_STARTED) {
-		ieee80211_free_node(ni);
 		m_freem(m);
 		return (ENETDOWN);
 	}
 
 	BWN_LOCK(sc);
 	if (bwn_tx_isfull(sc, m)) {
-		ieee80211_free_node(ni);
 		m_freem(m);
 		BWN_UNLOCK(sc);
 		return (ENOBUFS);
 	}
 
-	if (bwn_tx_start(sc, ni, m) != 0) {
-		if (ni != NULL)
-			ieee80211_free_node(ni);
-	}
-	sc->sc_watchdog_timer = 5;
+	error = bwn_tx_start(sc, ni, m);
+	if (error == 0)
+		sc->sc_watchdog_timer = 5;
 	BWN_UNLOCK(sc);
-	return (0);
+	return (error);
 }
 
 /*

Modified: head/sys/dev/iwm/if_iwm.c
==============================================================================
--- head/sys/dev/iwm/if_iwm.c	Mon Oct 12 04:30:38 2015	(r289164)
+++ head/sys/dev/iwm/if_iwm.c	Mon Oct 12 04:55:20 2015	(r289165)
@@ -2877,7 +2877,6 @@ iwm_raw_xmit(struct ieee80211_node *ni, 
 	    "->%s begin\n", __func__);
 
 	if ((sc->sc_flags & IWM_FLAG_HW_INITED) == 0) {
-		ieee80211_free_node(ni);
 		m_freem(m);
 		IWM_DPRINTF(sc, IWM_DEBUG_XMIT,
 		    "<-%s not RUNNING\n", __func__);
@@ -2891,10 +2890,6 @@ iwm_raw_xmit(struct ieee80211_node *ni, 
 	} else {
 		error = iwm_tx(sc, m, ni, 0);
 	}
-	if (error != 0) {
-		/* NB: m is reclaimed on tx failure */
-		ieee80211_free_node(ni);
-	}
 	sc->sc_tx_timer = 5;
 	IWM_UNLOCK(sc);
 

Modified: head/sys/dev/iwn/if_iwn.c
==============================================================================
--- head/sys/dev/iwn/if_iwn.c	Mon Oct 12 04:30:38 2015	(r289164)
+++ head/sys/dev/iwn/if_iwn.c	Mon Oct 12 04:55:20 2015	(r289165)
@@ -4875,7 +4875,6 @@ iwn_raw_xmit(struct ieee80211_node *ni, 
 	DPRINTF(sc, IWN_DEBUG_XMIT | IWN_DEBUG_TRACE, "->%s begin\n", __func__);
 
 	if ((sc->sc_flags & IWN_FLAG_RUNNING) == 0) {
-		ieee80211_free_node(ni);
 		m_freem(m);
 		return ENETDOWN;
 	}
@@ -4889,9 +4888,6 @@ iwn_raw_xmit(struct ieee80211_node *ni, 
 	if (sc->sc_beacon_wait) {
 		if (iwn_xmit_queue_enqueue(sc, m) != 0) {
 			m_freem(m);
-			if_inc_counter(ni->ni_vap->iv_ifp,
-			    IFCOUNTER_OERRORS, 1);
-			ieee80211_free_node(ni);
 			IWN_UNLOCK(sc);
 			return (ENOBUFS);
 		}
@@ -4913,10 +4909,7 @@ iwn_raw_xmit(struct ieee80211_node *ni, 
 		 */
 		error = iwn_tx_data_raw(sc, m, ni, params);
 	}
-	if (error != 0) {
-		/* NB: m is reclaimed on tx failure */
-		ieee80211_free_node(ni);
-	} else
+	if (error == 0)
 		sc->sc_tx_timer = 5;
 
 	IWN_UNLOCK(sc);

Modified: head/sys/dev/malo/if_malo.c
==============================================================================
--- head/sys/dev/malo/if_malo.c	Mon Oct 12 04:30:38 2015	(r289164)
+++ head/sys/dev/malo/if_malo.c	Mon Oct 12 04:55:20 2015	(r289165)
@@ -1786,7 +1786,6 @@ malo_raw_xmit(struct ieee80211_node *ni,
 	struct malo_txq *txq;
 
 	if (!sc->malo_running || sc->malo_invalid) {
-		ieee80211_free_node(ni);
 		m_freem(m);
 		return ENETDOWN;
 	}
@@ -1800,7 +1799,6 @@ malo_raw_xmit(struct ieee80211_node *ni,
 	txq = &sc->malo_txq[0];
 	bf = malo_getbuf(sc, txq);
 	if (bf == NULL) {
-		ieee80211_free_node(ni);
 		m_freem(m);
 		return ENOBUFS;
 	}
@@ -1816,7 +1814,6 @@ malo_raw_xmit(struct ieee80211_node *ni,
 		txq->nfree++;
 		MALO_TXQ_UNLOCK(txq);
 
-		ieee80211_free_node(ni);
 		return EIO;		/* XXX */
 	}
 

Modified: head/sys/dev/mwl/if_mwl.c
==============================================================================
--- head/sys/dev/mwl/if_mwl.c	Mon Oct 12 04:30:38 2015	(r289164)
+++ head/sys/dev/mwl/if_mwl.c	Mon Oct 12 04:55:20 2015	(r289165)
@@ -1422,7 +1422,6 @@ mwl_raw_xmit(struct ieee80211_node *ni, 
 	struct mwl_txq *txq;
 
 	if (!sc->sc_running || sc->sc_invalid) {
-		ieee80211_free_node(ni);
 		m_freem(m);
 		return ENETDOWN;
 	}
@@ -1438,7 +1437,6 @@ mwl_raw_xmit(struct ieee80211_node *ni, 
 	bf = mwl_gettxbuf(sc, txq);
 	if (bf == NULL) {
 		sc->sc_stats.mst_tx_qstop++;
-		ieee80211_free_node(ni);
 		m_freem(m);
 		return ENOBUFS;
 	}
@@ -1448,7 +1446,6 @@ mwl_raw_xmit(struct ieee80211_node *ni, 
 	if (mwl_tx_start(sc, ni, bf, m)) {
 		mwl_puttxbuf_head(txq, bf);
 
-		ieee80211_free_node(ni);
 		return EIO;		/* XXX */
 	}
 	/*

Modified: head/sys/dev/otus/if_otus.c
==============================================================================
--- head/sys/dev/otus/if_otus.c	Mon Oct 12 04:30:38 2015	(r289164)
+++ head/sys/dev/otus/if_otus.c	Mon Oct 12 04:55:20 2015	(r289165)
@@ -567,7 +567,6 @@ error:
 	if (bf)
 		otus_freebuf(sc, bf);
 	OTUS_UNLOCK(sc);
-	ieee80211_free_node(ni);
 	m_freem(m);
 	return (ENXIO);
 }

Modified: head/sys/dev/ral/rt2560.c
==============================================================================
--- head/sys/dev/ral/rt2560.c	Mon Oct 12 04:30:38 2015	(r289164)
+++ head/sys/dev/ral/rt2560.c	Mon Oct 12 04:55:20 2015	(r289165)
@@ -2711,13 +2711,11 @@ rt2560_raw_xmit(struct ieee80211_node *n
 	if (!(sc->sc_flags & RT2560_F_RUNNING)) {
 		RAL_UNLOCK(sc);
 		m_freem(m);
-		ieee80211_free_node(ni);
 		return ENETDOWN;
 	}
 	if (sc->prioq.queued >= RT2560_PRIO_RING_COUNT) {
 		RAL_UNLOCK(sc);
 		m_freem(m);
-		ieee80211_free_node(ni);
 		return ENOBUFS;		/* XXX */
 	}
 
@@ -2742,7 +2740,6 @@ rt2560_raw_xmit(struct ieee80211_node *n
 
 	return 0;
 bad:
-	ieee80211_free_node(ni);
 	RAL_UNLOCK(sc);
 	return EIO;		/* XXX */
 }

Modified: head/sys/dev/ral/rt2661.c
==============================================================================
--- head/sys/dev/ral/rt2661.c	Mon Oct 12 04:30:38 2015	(r289164)
+++ head/sys/dev/ral/rt2661.c	Mon Oct 12 04:55:20 2015	(r289165)
@@ -1636,13 +1636,11 @@ rt2661_raw_xmit(struct ieee80211_node *n
 	if (!(sc->sc_flags & RAL_RUNNING)) {
 		RAL_UNLOCK(sc);
 		m_freem(m);
-		ieee80211_free_node(ni);
 		return ENETDOWN;
 	}
 	if (sc->mgtq.queued >= RT2661_MGT_RING_COUNT) {
 		RAL_UNLOCK(sc);
 		m_freem(m);
-		ieee80211_free_node(ni);
 		return ENOBUFS;		/* XXX */
 	}
 
@@ -1659,7 +1657,6 @@ rt2661_raw_xmit(struct ieee80211_node *n
 
 	return 0;
 bad:
-	ieee80211_free_node(ni);
 	RAL_UNLOCK(sc);
 	return EIO;		/* XXX */
 }

Modified: head/sys/dev/ral/rt2860.c
==============================================================================
--- head/sys/dev/ral/rt2860.c	Mon Oct 12 04:30:38 2015	(r289164)
+++ head/sys/dev/ral/rt2860.c	Mon Oct 12 04:55:20 2015	(r289165)
@@ -1702,7 +1702,6 @@ rt2860_raw_xmit(struct ieee80211_node *n
 	if (!(sc->sc_flags & RT2860_RUNNNING)) {
 		RAL_UNLOCK(sc);
 		m_freem(m);
-		ieee80211_free_node(ni);
 		return ENETDOWN;
 	}
 	if (params == NULL) {
@@ -1718,10 +1717,6 @@ rt2860_raw_xmit(struct ieee80211_node *n
 		 */
 		error = rt2860_tx_raw(sc, m, ni, params);
 	}
-	if (error != 0) {
-		/* NB: m is reclaimed on tx failure */
-		ieee80211_free_node(ni);
-	}
 	sc->sc_tx_timer = 5;
 	RAL_UNLOCK(sc);
 	return error;

Modified: head/sys/dev/usb/wlan/if_rsu.c
==============================================================================
--- head/sys/dev/usb/wlan/if_rsu.c	Mon Oct 12 04:30:38 2015	(r289164)
+++ head/sys/dev/usb/wlan/if_rsu.c	Mon Oct 12 04:55:20 2015	(r289165)
@@ -2793,19 +2793,16 @@ rsu_raw_xmit(struct ieee80211_node *ni, 
 	/* prevent management frames from being sent if we're not ready */
 	if (!sc->sc_running) {
 		m_freem(m);
-		ieee80211_free_node(ni);
 		return (ENETDOWN);
 	}
 	RSU_LOCK(sc);
 	bf = rsu_getbuf(sc);
 	if (bf == NULL) {
-		ieee80211_free_node(ni);
 		m_freem(m);
 		RSU_UNLOCK(sc);
 		return (ENOBUFS);
 	}
 	if (rsu_tx_start(sc, ni, m, bf) != 0) {
-		ieee80211_free_node(ni);
 		m_freem(m);
 		rsu_freebuf(sc, bf);
 		RSU_UNLOCK(sc);

Modified: head/sys/dev/usb/wlan/if_rum.c
==============================================================================
--- head/sys/dev/usb/wlan/if_rum.c	Mon Oct 12 04:30:38 2015	(r289164)
+++ head/sys/dev/usb/wlan/if_rum.c	Mon Oct 12 04:55:20 2015	(r289165)
@@ -2850,7 +2850,6 @@ rum_raw_xmit(struct ieee80211_node *ni, 
 bad:
 	RUM_UNLOCK(sc);
 	m_freem(m);
-	ieee80211_free_node(ni);
 	return ret;
 }
 

Modified: head/sys/dev/usb/wlan/if_run.c
==============================================================================
--- head/sys/dev/usb/wlan/if_run.c	Mon Oct 12 04:30:38 2015	(r289164)
+++ head/sys/dev/usb/wlan/if_run.c	Mon Oct 12 04:55:20 2015	(r289165)
@@ -3707,7 +3707,6 @@ done:
 	if (error != 0) {
 		if(m != NULL)
 			m_freem(m);
-		ieee80211_free_node(ni);
 	}
 
 	return (error);

Modified: head/sys/dev/usb/wlan/if_uath.c
==============================================================================
--- head/sys/dev/usb/wlan/if_uath.c	Mon Oct 12 04:30:38 2015	(r289164)
+++ head/sys/dev/usb/wlan/if_uath.c	Mon Oct 12 04:55:20 2015	(r289165)
@@ -1781,7 +1781,6 @@ uath_raw_xmit(struct ieee80211_node *ni,
 	if ((sc->sc_flags & UATH_FLAG_INVALID) ||
 	    !(sc->sc_flags & UATH_FLAG_INITDONE)) {
 		m_freem(m);
-		ieee80211_free_node(ni);
 		UATH_UNLOCK(sc);
 		return (ENETDOWN);
 	}
@@ -1789,7 +1788,6 @@ uath_raw_xmit(struct ieee80211_node *ni,
 	/* grab a TX buffer  */
 	bf = uath_getbuf(sc);
 	if (bf == NULL) {
-		ieee80211_free_node(ni);
 		m_freem(m);
 		UATH_UNLOCK(sc);
 		return (ENOBUFS);
@@ -1797,7 +1795,6 @@ uath_raw_xmit(struct ieee80211_node *ni,
 
 	sc->sc_seqnum = 0;
 	if (uath_tx_start(sc, m, ni, bf) != 0) {
-		ieee80211_free_node(ni);
 		STAILQ_INSERT_HEAD(&sc->sc_tx_inactive, bf, next);
 		UATH_STAT_INC(sc, st_tx_inactive);
 		UATH_UNLOCK(sc);

Modified: head/sys/dev/usb/wlan/if_upgt.c
==============================================================================
--- head/sys/dev/usb/wlan/if_upgt.c	Mon Oct 12 04:30:38 2015	(r289164)
+++ head/sys/dev/usb/wlan/if_upgt.c	Mon Oct 12 04:55:20 2015	(r289165)
@@ -798,14 +798,12 @@ upgt_raw_xmit(struct ieee80211_node *ni,
 	/* prevent management frames from being sent if we're not ready */
 	if (!(sc->sc_flags & UPGT_FLAG_INITDONE)) {
 		m_freem(m);
-		ieee80211_free_node(ni);
 		UPGT_UNLOCK(sc);
 		return ENETDOWN;
 	}
 
 	data_tx = upgt_gettxbuf(sc);
 	if (data_tx == NULL) {
-		ieee80211_free_node(ni);
 		m_freem(m);
 		UPGT_UNLOCK(sc);
 		return (ENOBUFS);
@@ -814,7 +812,6 @@ upgt_raw_xmit(struct ieee80211_node *ni,
 	if (upgt_tx_start(sc, m, ni, data_tx) != 0) {
 		STAILQ_INSERT_HEAD(&sc->sc_tx_inactive, data_tx, next);
 		UPGT_STAT_INC(sc, st_tx_inactive);
-		ieee80211_free_node(ni);
 		UPGT_UNLOCK(sc);
 		return (EIO);
 	}

Modified: head/sys/dev/usb/wlan/if_ural.c
==============================================================================
--- head/sys/dev/usb/wlan/if_ural.c	Mon Oct 12 04:30:38 2015	(r289164)
+++ head/sys/dev/usb/wlan/if_ural.c	Mon Oct 12 04:55:20 2015	(r289165)
@@ -2123,13 +2123,11 @@ ural_raw_xmit(struct ieee80211_node *ni,
 	if (!sc->sc_running) {
 		RAL_UNLOCK(sc);
 		m_freem(m);
-		ieee80211_free_node(ni);
 		return ENETDOWN;
 	}
 	if (sc->tx_nfree < RAL_TX_MINFREE) {
 		RAL_UNLOCK(sc);
 		m_freem(m);
-		ieee80211_free_node(ni);
 		return EIO;
 	}
 
@@ -2152,7 +2150,6 @@ ural_raw_xmit(struct ieee80211_node *ni,
 	return 0;
 bad:
 	RAL_UNLOCK(sc);
-	ieee80211_free_node(ni);
 	return EIO;		/* XXX */
 }
 

Modified: head/sys/dev/usb/wlan/if_urtw.c
==============================================================================
--- head/sys/dev/usb/wlan/if_urtw.c	Mon Oct 12 04:30:38 2015	(r289164)
+++ head/sys/dev/usb/wlan/if_urtw.c	Mon Oct 12 04:55:20 2015	(r289165)
@@ -1527,20 +1527,17 @@ urtw_raw_xmit(struct ieee80211_node *ni,
 	/* prevent management frames from being sent if we're not ready */
 	if (!(sc->sc_flags & URTW_RUNNING)) {
 		m_freem(m);
-		ieee80211_free_node(ni);
 		return ENETDOWN;
 	}
 	URTW_LOCK(sc);
 	bf = urtw_getbuf(sc);
 	if (bf == NULL) {
-		ieee80211_free_node(ni);
 		m_freem(m);
 		URTW_UNLOCK(sc);
 		return (ENOBUFS);		/* XXX */
 	}
 
 	if (urtw_tx_start(sc, ni, m, bf, URTW_PRIORITY_LOW) != 0) {
-		ieee80211_free_node(ni);
 		STAILQ_INSERT_HEAD(&sc->sc_tx_inactive, bf, next);
 		URTW_UNLOCK(sc);
 		return (EIO);

Modified: head/sys/dev/usb/wlan/if_urtwn.c
==============================================================================
--- head/sys/dev/usb/wlan/if_urtwn.c	Mon Oct 12 04:30:38 2015	(r289164)
+++ head/sys/dev/usb/wlan/if_urtwn.c	Mon Oct 12 04:55:20 2015	(r289165)
@@ -3460,13 +3460,11 @@ urtwn_raw_xmit(struct ieee80211_node *ni
 	/* prevent management frames from being sent if we're not ready */
 	if (!(sc->sc_flags & URTWN_RUNNING)) {
 		m_freem(m);
-		ieee80211_free_node(ni);
 		return (ENETDOWN);
 	}
 	URTWN_LOCK(sc);
 	bf = urtwn_getbuf(sc);
 	if (bf == NULL) {
-		ieee80211_free_node(ni);
 		m_freem(m);
 		URTWN_UNLOCK(sc);
 		return (ENOBUFS);
@@ -3474,7 +3472,6 @@ urtwn_raw_xmit(struct ieee80211_node *ni
 
 	if (urtwn_tx_start(sc, ni, m, bf) != 0) {
 		m_freem(m);
-		ieee80211_free_node(ni);
 		STAILQ_INSERT_HEAD(&sc->sc_tx_inactive, bf, next);
 		URTWN_UNLOCK(sc);
 		return (EIO);

Modified: head/sys/dev/usb/wlan/if_zyd.c
==============================================================================
--- head/sys/dev/usb/wlan/if_zyd.c	Mon Oct 12 04:30:38 2015	(r289164)
+++ head/sys/dev/usb/wlan/if_zyd.c	Mon Oct 12 04:55:20 2015	(r289165)
@@ -2590,13 +2590,11 @@ zyd_raw_xmit(struct ieee80211_node *ni, 
 	if (!(sc->sc_flags & ZYD_FLAG_RUNNING)) {
 		ZYD_UNLOCK(sc);
 		m_freem(m);
-		ieee80211_free_node(ni);
 		return (ENETDOWN);
 	}
 	if (sc->tx_nfree == 0) {
 		ZYD_UNLOCK(sc);
 		m_freem(m);
-		ieee80211_free_node(ni);
 		return (ENOBUFS);		/* XXX */
 	}
 
@@ -2607,7 +2605,6 @@ zyd_raw_xmit(struct ieee80211_node *ni, 
 	 */
 	if (zyd_tx_start(sc, m, ni) != 0) {
 		ZYD_UNLOCK(sc);
-		ieee80211_free_node(ni);
 		m_freem(m);
 		return (EIO);
 	}

Modified: head/sys/dev/wi/if_wi.c
==============================================================================
--- head/sys/dev/wi/if_wi.c	Mon Oct 12 04:30:38 2015	(r289164)
+++ head/sys/dev/wi/if_wi.c	Mon Oct 12 04:55:20 2015	(r289165)
@@ -1077,6 +1077,7 @@ wi_raw_xmit(struct ieee80211_node *ni, s
 		goto out;
 	}
 	m0 = NULL;
+	ieee80211_free_node(ni);
 
 	sc->sc_txnext = cur = (cur + 1) % sc->sc_ntxbuf;
 out:
@@ -1084,7 +1085,6 @@ out:
 
 	if (m0 != NULL)
 		m_freem(m0);
-	ieee80211_free_node(ni);
 	return rc;
 }
 

Modified: head/sys/dev/wpi/if_wpi.c
==============================================================================
--- head/sys/dev/wpi/if_wpi.c	Mon Oct 12 04:30:38 2015	(r289164)
+++ head/sys/dev/wpi/if_wpi.c	Mon Oct 12 04:55:20 2015	(r289165)
@@ -3093,7 +3093,6 @@ unlock:	WPI_TX_UNLOCK(sc);
 
 	if (error != 0) {
 		m_freem(m);
-		ieee80211_free_node(ni);
 		DPRINTF(sc, WPI_DEBUG_TRACE, TRACE_STR_END_ERR, __func__);
 
 		return error;

Modified: head/sys/net80211/ieee80211_output.c
==============================================================================
--- head/sys/net80211/ieee80211_output.c	Mon Oct 12 04:30:38 2015	(r289164)
+++ head/sys/net80211/ieee80211_output.c	Mon Oct 12 04:55:20 2015	(r289165)
@@ -531,8 +531,10 @@ ieee80211_raw_output(struct ieee80211vap
 		(void) ieee80211_add_xmit_params(m, params);
 
 	error = ic->ic_raw_xmit(ni, m, params);
-	if (error)
+	if (error) {
 		if_inc_counter(vap->iv_ifp, IFCOUNTER_OERRORS, 1);
+		ieee80211_free_node(ni);
+	}
 	return (error);
 }
 


More information about the svn-src-all mailing list