* Willy Tarreau <w@xxxxxx> wrote:
On Thu, Jan 08, 2009 at 07:16:51AM +0000, Jarek Poplawski wrote:On 06-01-2009 19:15, Willy Tarreau wrote:Ah cool, thanks Jarek for notifying us. Indeed, it's the exact same patch
...
Ah, so you might also have discovered a few annoyances with the API, egFYI, this should be just fixed:
the fact that splice() returns after the first read in non-blocking mode,
as well as the fact that it never returns zero on close, but -EAGAIN,
which requires an additional recv(MSG_PEEK) to distinguish between a
close and a lack of data. But I leave that for a later discussion, let's
address the corruption issue first.
http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commitdiff;h=4f7d54f59bc470f0aaa932f747a95232d7ebf8b1
I had pending here ;-)
I'll ping Greg for a backport into -stable, as applications relying on this will clearly not work without that fix.
The other one I had consists in removing "|| !timeo" at the end of the loop, because otherwise splice() returns very small chunks (typically 1448 or 1460 bytes), leading to disastrous performance on high bandwidth links. At 10 Gbps, this means about 800000 calls to splice() per second!
looks interesting - would you mind to submit it?