Date: Tue, 03 Nov 2015 18:12:48 +0200 From: "Andriy Voskoboinyk" <avos@freebsd.org> To: "Adrian Chadd" <adrian@freebsd.org>, "freebsd-wireless@freebsd.org" <freebsd-wireless@freebsd.org>, "Mark Felder" <feld@freebsd.org> Subject: Re: (untested) ath fix upon error Message-ID: <op.x7i8nmgh4dikkl@localhost> In-Reply-To: <CAJ-Vmom3hOt63Tc1332hPFpqkEcbSvrCA=nRGgwMLLf02Pbr2Q@mail.gmail.com> References: <CAJ-Vmom3hOt63Tc1332hPFpqkEcbSvrCA=nRGgwMLLf02Pbr2Q@mail.gmail.com>
index | next in thread | previous in thread | raw e-mail
Tue, 03 Nov 2015 17:31:18 +0200 було написано Adrian Chadd
<adrian@freebsd.org>:
> 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.
>
>
> -adrian
help
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?op.x7i8nmgh4dikkl>
