Skip site navigation (1)Skip section navigation (2)
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>