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;
}
int idx, error;
if ((sc->sc_flags & BWI_F_RUNNING) == 0) {
- ieee80211_free_node(ni);
m_freem(m);
return ENETDOWN;
}
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;
}
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);
}
/*
"->%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__);
} 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);
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;
}
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);
}
*/
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);
struct malo_txq *txq;
if (!sc->malo_running || sc->malo_invalid) {
- ieee80211_free_node(ni);
m_freem(m);
return ENETDOWN;
}
txq = &sc->malo_txq[0];
bf = malo_getbuf(sc, txq);
if (bf == NULL) {
- ieee80211_free_node(ni);
m_freem(m);
return ENOBUFS;
}
txq->nfree++;
MALO_TXQ_UNLOCK(txq);
- ieee80211_free_node(ni);
return EIO; /* XXX */
}
struct mwl_txq *txq;
if (!sc->sc_running || sc->sc_invalid) {
- ieee80211_free_node(ni);
m_freem(m);
return ENETDOWN;
}
bf = mwl_gettxbuf(sc, txq);
if (bf == NULL) {
sc->sc_stats.mst_tx_qstop++;
- ieee80211_free_node(ni);
m_freem(m);
return ENOBUFS;
}
if (mwl_tx_start(sc, ni, bf, m)) {
mwl_puttxbuf_head(txq, bf);
- ieee80211_free_node(ni);
return EIO; /* XXX */
}
/*
if (bf)
otus_freebuf(sc, bf);
OTUS_UNLOCK(sc);
- ieee80211_free_node(ni);
m_freem(m);
return (ENXIO);
}
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 */
}
return 0;
bad:
- ieee80211_free_node(ni);
RAL_UNLOCK(sc);
return EIO; /* XXX */
}
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 */
}
return 0;
bad:
- ieee80211_free_node(ni);
RAL_UNLOCK(sc);
return EIO; /* XXX */
}
if (!(sc->sc_flags & RT2860_RUNNNING)) {
RAL_UNLOCK(sc);
m_freem(m);
- ieee80211_free_node(ni);
return ENETDOWN;
}
if (params == NULL) {
*/
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;
/* 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);
bad:
RUM_UNLOCK(sc);
m_freem(m);
- ieee80211_free_node(ni);
return ret;
}
if (error != 0) {
if(m != NULL)
m_freem(m);
- ieee80211_free_node(ni);
}
return (error);
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);
}
/* grab a TX buffer */
bf = uath_getbuf(sc);
if (bf == NULL) {
- ieee80211_free_node(ni);
m_freem(m);
UATH_UNLOCK(sc);
return (ENOBUFS);
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);
/* 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);
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);
}
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;
}
return 0;
bad:
RAL_UNLOCK(sc);
- ieee80211_free_node(ni);
return EIO; /* XXX */
}
/* 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);
/* 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);
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);
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 */
}
*/
if (zyd_tx_start(sc, m, ni) != 0) {
ZYD_UNLOCK(sc);
- ieee80211_free_node(ni);
m_freem(m);
return (EIO);
}
goto out;
}
m0 = NULL;
+ ieee80211_free_node(ni);
sc->sc_txnext = cur = (cur + 1) % sc->sc_ntxbuf;
out:
if (m0 != NULL)
m_freem(m0);
- ieee80211_free_node(ni);
return rc;
}
if (error != 0) {
m_freem(m);
- ieee80211_free_node(ni);
DPRINTF(sc, WPI_DEBUG_TRACE, TRACE_STR_END_ERR, __func__);
return error;
(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);
}