On Thu, 2017-02-02 at 05:31 -0800, Eric Dumazet wrote:
> Anyway, I suspect the test is simply buggy ;)
>
> diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c
> index
> 41dcbd568cbe2403f2a9e659669afe462a42e228..5394a39fcce964a7fe7075b1531a8a1e05550a54
> 100644
> --- a/net/ipv4/tcp_input.c
> +++ b/net/ipv4/tcp_input.c
> @@ -164,7 +164,7 @@ static void tcp_measure_rcv_mss(struct sock *sk, const
> struct sk_buff *skb)
> if (len >= icsk->icsk_ack.rcv_mss) {
> icsk->icsk_ack.rcv_mss = min_t(unsigned int, len,
> tcp_sk(sk)->advmss);
> - if (unlikely(icsk->icsk_ack.rcv_mss != len))
> + if (unlikely(icsk->icsk_ack.rcv_mss != len && skb_is_gso(skb)))
> tcp_gro_dev_warn(sk, skb);
> } else {
> /* Otherwise, we make more careful check taking into account,
This wont really help.
Our tcp_sk(sk)->advmss can be lower than the MSS used by the remote
peer.
ip ro add .... advmss 512
So the test is not universal.