On Mon, 2015-02-02 at 10:52 -0800, Eric Dumazet wrote: > It seems to break ACK clocking badly (linux stack has a somewhat buggy > tcp_tso_should_defer(), which relies on ACK being received smoothly, as > no timer is setup to split the TSO packet.) Following patch might help the TSO split defer logic. It would avoid setting the TSO defer 'pseudo timer' twice, if/when TCP Small Queue logic prevented the xmit at the expiration of first 'timer'. This patch clears the tso_deferred variable only if we could really send something. Please try it, thanks ! diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c index 65caf8b95e17..e735f38557db 100644 --- a/net/ipv4/tcp_output.c +++ b/net/ipv4/tcp_output.c @@ -1821,7 +1821,6 @@ static bool tcp_tso_should_defer(struct sock *sk, struct sk_buff *skb, return true; send_now: - tp->tso_deferred = 0; return false; } @@ -2070,6 +2069,7 @@ static bool tcp_write_xmit(struct sock *sk, unsigned int mss_now, int nonagle, if (unlikely(tcp_transmit_skb(sk, skb, 1, gfp))) break; + tp->tso_deferred = 0; repair: /* Advance the send_head. This one is sent out. * This call will increment packets_out. -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html