'no buffer space available' after switch goes down on freeBSD 7.3
Adrian Chadd
adrian at freebsd.org
Tue Dec 25 01:45:48 UTC 2012
On 24 December 2012 17:01, Ryan Stone <rysto32 at gmail.com> wrote:
> I don't believe that this is fixed in later versions of the driver. The
> problem is that when the interface loses link the transmit queue can fill
> up. Once that happens the driver never gets any more calls from the network
> stack to make it send packets. Pinging the interface fixes it because the
> driver processes rx.and tx from the same context, so when it receives a
> packet it starts transmitting again.
>
> The patch that I sent fixes the problem by forcing the driver to process
> the tx queue when ever links goes from down to up.
This is a cute fix, and I've noticed similar issues in net80211.
In net80211, the stack currently calls if_start() to re-attempt frame
transmission during a VAP state transition to RUN.
This has similar issues (ie, it assumes that if_start() DTRT; it
assumes OACTIVE has been cleared, etc.)
I think we may need another if_* method which specifically attempts to
service the TX queue again; versus just waiting for if_transmit() to
make some progress.
Adrian
More information about the freebsd-net
mailing list