On 3 November 2015 at 08:12, Andriy Voskoboinyk <a...@freebsd.org> wrote:
> Tue, 03 Nov 2015 17:31:18 +0200 було написано Adrian Chadd
> <adr...@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.
>

Cool, thanks!


-a
_______________________________________________
freebsd-wireless@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/freebsd-wireless
To unsubscribe, send any mail to "freebsd-wireless-unsubscr...@freebsd.org"

Reply via email to