(untested) ath fix upon error
Adrian Chadd
adrian at freebsd.org
Tue Nov 3 15:31:19 UTC 2015
hiya,
what do people think about this to fix ath(4) transmit errors:
adrian at 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
More information about the freebsd-wireless
mailing list