On Mon, 2016-06-27 at 12:50 +0200, Eric Dumazet wrote: > On Mon, 2016-06-27 at 15:24 +0530, Arjun V wrote: > > > Applied your patch. > > The above debug print is not getting invoked, when skb->len is greater than > > 65536. > > Interesting. > > It looks like we might have a bug in tcp_shift_skb_data() not respecting > sk->sk_gso_max_size at all ...
Note that this also means TCP receiver misbehaves and force us to SACK reneging. Patch would be : diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c index 8bd9911fdd16..3587efe22864 100644 --- a/net/ipv4/tcp_output.c +++ b/net/ipv4/tcp_output.c @@ -2784,6 +2784,10 @@ void tcp_xmit_retransmit_queue(struct sock *sk) segs = tp->snd_cwnd - tcp_packets_in_flight(tp); if (segs <= 0) return; + /* In case tcp_shift_skb_data() have aggregated large skbs, + * we need to make sure not sending too big TSO packets. + */ + segs = min_t(int, segs, tp->gso_segs); if (fwd_rexmitting) { begin_fwd: