Date: Tue, 3 Nov 2015 07:31:18 -0800 From: Adrian Chadd <adrian@freebsd.org> To: "freebsd-wireless@freebsd.org" <freebsd-wireless@freebsd.org>, Mark Felder <feld@freebsd.org> Subject: (untested) ath fix upon error Message-ID: <CAJ-Vmom3hOt63Tc1332hPFpqkEcbSvrCA=nRGgwMLLf02Pbr2Q@mail.gmail.com>
next in thread | raw e-mail | index | archive | help
hiya, what do people think about this to fix ath(4) transmit errors: adrian@victoria:~/work/freebsd/head-embedded/src % svn diff sys/dev/ath Index: sys/dev/ath/if_ath.c =================================================================== --- sys/dev/ath/if_ath.c (revision 290048) +++ sys/dev/ath/if_ath.c (working copy) @@ -3320,6 +3320,9 @@ * * Note: if this fails, then the mbufs are freed but * not the node reference. + * + * So, we now have to free the node reference ourselves here + * and return OK up to the stack. */ next = m->m_nextpkt; if (ath_tx_start(sc, ni, bf, m)) { @@ -3336,7 +3339,14 @@ */ ath_txfrag_cleanup(sc, &frags, ni); ATH_TXBUF_UNLOCK(sc); - retval = ENOBUFS; + + /* + * XXX: And free the node/return OK; ath_tx_start() may have + * modified the buffer. We currently have no way to + * signify that the mbuf was freed but there was an error. + */ + ieee80211_node_free(ni); + retval = 0; goto finish; } .. the idea is that we can't return failure once we've called ath_tx_start(), as the mbuf needs to be consumed. So we return OK and just count an error. -adrian
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAJ-Vmom3hOt63Tc1332hPFpqkEcbSvrCA=nRGgwMLLf02Pbr2Q>