On 3 November 2015 at 08:12, Andriy Voskoboinyk <[email protected]> wrote: > Tue, 03 Nov 2015 17:31:18 +0200 було написано Adrian Chadd > <[email protected]>: > > >> 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. >> > > Yes, I think this (temporary?) workaround should fix the issue. >
Cool, thanks! -a _______________________________________________ [email protected] mailing list https://lists.freebsd.org/mailman/listinfo/freebsd-wireless To unsubscribe, send any mail to "[email protected]"
