From: Yuchung Cheng Date: Mon, 11 Jan 2021 23:05:52 +0000 (-0800) Subject: tcp: assign skb hash after tcp_event_data_sent X-Git-Tag: v5.12-rc1~200^2~345 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=0ae5b43d6dde6003070106e97cd0d41bace2eeb2;p=thirdparty%2Flinux.git tcp: assign skb hash after tcp_event_data_sent Move skb_set_hash_from_sk s.t. it's called after instead of before tcp_event_data_sent is called. This enables congestion control modules to change the socket hash right before restarting from idle (via the TX_START congestion event). Signed-off-by: Yuchung Cheng Signed-off-by: Eric Dumazet Signed-off-by: Neal Cardwell Link: https://lore.kernel.org/r/20210111230552.2704579-1-ycheng@google.com Signed-off-by: Jakub Kicinski --- diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c index f322e798a3519..899d053cb10ed 100644 --- a/net/ipv4/tcp_output.c +++ b/net/ipv4/tcp_output.c @@ -1319,7 +1319,6 @@ static int __tcp_transmit_skb(struct sock *sk, struct sk_buff *skb, skb_orphan(skb); skb->sk = sk; skb->destructor = skb_is_tcp_pure_ack(skb) ? __sock_wfree : tcp_wfree; - skb_set_hash_from_sk(skb, sk); refcount_add(skb->truesize, &sk->sk_wmem_alloc); skb_set_dst_pending_confirm(skb, sk->sk_dst_pending_confirm); @@ -1390,6 +1389,7 @@ static int __tcp_transmit_skb(struct sock *sk, struct sk_buff *skb, tcp_skb_pcount(skb)); tp->segs_out += tcp_skb_pcount(skb); + skb_set_hash_from_sk(skb, sk); /* OK, its time to fill skb_shinfo(skb)->gso_{segs|size} */ skb_shinfo(skb)->gso_segs = tcp_skb_pcount(skb); skb_shinfo(skb)->gso_size = tcp_skb_mss(skb);