Date: Mon, 24 Dec 2012 17:45:47 -0800 From: Adrian Chadd <adrian@freebsd.org> To: Ryan Stone <rysto32@gmail.com> Cc: freebsd-net <freebsd-net@freebsd.org>, Tsaregorodtsev Denis <telemat@extrim.it> Subject: Re: 'no buffer space available' after switch goes down on freeBSD 7.3 Message-ID: <CAJ-Vmo=2kB8TgiHK_xtfAmS4g=Np1-Ebfa1A3HvzUOqpTACBEA@mail.gmail.com> In-Reply-To: <CAFMmRNz9VDGg12_XbdhAfURPm3Vs5=nH6aEzqA0281Rq5iOOMA@mail.gmail.com> References: <50D45282.5080708@extrim.it> <CAFMmRNy26AvdJjW9N4zPNPYrVYn1a2Qr8W5qy9MTV_30dvCqCA@mail.gmail.com> <50D7F61A.5020304@extrim.it> <CAFMmRNz9VDGg12_XbdhAfURPm3Vs5=nH6aEzqA0281Rq5iOOMA@mail.gmail.com>
next in thread | previous in thread | raw e-mail | index | archive | help
On 24 December 2012 17:01, Ryan Stone <rysto32@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
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAJ-Vmo=2kB8TgiHK_xtfAmS4g=Np1-Ebfa1A3HvzUOqpTACBEA>