(untested) ath fix upon error
Mark Felder
feld at FreeBSD.org
Wed Nov 4 18:18:31 UTC 2015
On Wed, Nov 4, 2015, at 12:11, Adrian Chadd wrote:
> On 3 November 2015 at 08:12, Andriy Voskoboinyk <avos at freebsd.org> wrote:
> > Tue, 03 Nov 2015 17:31:18 +0200 було написано Adrian Chadd
> > <adrian at freebsd.org>:
> >
> >
> >> 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.
> >>
> >
> > Yes, I think this (temporary?) workaround should fix the issue.
> >
>
> Cool, thanks!
>
>
> -a
I'm running it... if I can manage a few days uptime it has worked.
--
Mark Felder
ports-secteam member
feld at FreeBSD.org
More information about the freebsd-wireless
mailing list