tcp_cubic: make hystart_ack_delay() aware of BIG TCP
authorEric Dumazet <edumazet@google.com>
Fri, 13 May 2022 18:33:59 +0000 (11:33 -0700)
committerDavid S. Miller <davem@davemloft.net>
Mon, 16 May 2022 09:18:56 +0000 (10:18 +0100)
hystart_ack_delay() had the assumption that a TSO packet
would not be bigger than GSO_MAX_SIZE.

This will no longer be true.

We should use sk->sk_gso_max_size instead.

This reduces chances of spurious Hystart ACK train detections.

Signed-off-by: Eric Dumazet <edumazet@google.com>
Acked-by: Alexander Duyck <alexanderduyck@fb.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/ipv4/tcp_cubic.c

index b0918839bee7cf0264ec3bbcdfc1417daa86d197..68178e7280ce24c26a48e48a51518d759e4d1718 100644 (file)
@@ -372,7 +372,7 @@ static void cubictcp_state(struct sock *sk, u8 new_state)
  * We apply another 100% factor because @rate is doubled at this point.
  * We cap the cushion to 1ms.
  */
-static u32 hystart_ack_delay(struct sock *sk)
+static u32 hystart_ack_delay(const struct sock *sk)
 {
        unsigned long rate;
 
@@ -380,7 +380,7 @@ static u32 hystart_ack_delay(struct sock *sk)
        if (!rate)
                return 0;
        return min_t(u64, USEC_PER_MSEC,
-                    div64_ul((u64)GSO_MAX_SIZE * 4 * USEC_PER_SEC, rate));
+                    div64_ul((u64)sk->sk_gso_max_size * 4 * USEC_PER_SEC, rate));
 }
 
 static void hystart_update(struct sock *sk, u32 delay)