On Sun, 2013-01-06 at 17:44 +0100, Willy Tarreau wrote: > On Sun, Jan 06, 2013 at 08:39:53AM -0800, Eric Dumazet wrote: > > Hmm, I'll have to check if this really can be reverted without hurting > > vmsplice() again. > > Looking at the code I've been wondering whether we shouldn't transform > the condition to perform the push if we can't push more segments, but > I don't know what to rely on. It would be something like this : > > if (copied && > (!(flags & MSG_SENDPAGE_NOTLAST) || cant_push_more)) > tcp_push(sk, flags, mss_now, tp->nonagle);
Good point ! Maybe the following fix then ? diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c index 1ca2536..7ba0717 100644 --- a/net/ipv4/tcp.c +++ b/net/ipv4/tcp.c @@ -941,8 +941,10 @@ out: return copied; do_error: - if (copied) + if (copied) { + flags &= ~MSG_SENDPAGE_NOTLAST; goto out; + } out_err: return sk_stream_error(sk, flags, err); } -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/