mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/chenhuacai/linux-loongson
synced 2025-08-27 06:50:37 +00:00
tcp: adjust rcvbuf in presence of reorders
This patch takes care of the needed provisioning when incoming packets are stored in the out of order queue. This part was not implemented in the correct way, we need to decouple it from tcp_rcv_space_adjust() logic. Without it, stalls in the pipe could happen. Signed-off-by: Eric Dumazet <edumazet@google.com> Link: https://patch.msgid.link/20250513193919.1089692-4-edumazet@google.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
65c5287892
commit
63ad7dfedf
@ -760,6 +760,9 @@ static void tcp_rcvbuf_grow(struct sock *sk)
|
||||
/* slow start: allow the sender to double its rate. */
|
||||
rcvwin = tp->rcvq_space.space << 1;
|
||||
|
||||
if (!RB_EMPTY_ROOT(&tp->out_of_order_queue))
|
||||
rcvwin += TCP_SKB_CB(tp->ooo_last_skb)->end_seq - tp->rcv_nxt;
|
||||
|
||||
cap = READ_ONCE(net->ipv4.sysctl_tcp_rmem[2]);
|
||||
|
||||
rcvbuf = min_t(u32, tcp_space_from_win(sk, rcvwin), cap);
|
||||
@ -5166,6 +5169,7 @@ static void tcp_data_queue_ofo(struct sock *sk, struct sk_buff *skb)
|
||||
skb_condense(skb);
|
||||
skb_set_owner_r(skb, sk);
|
||||
}
|
||||
tcp_rcvbuf_grow(sk);
|
||||
}
|
||||
|
||||
static int __must_check tcp_queue_rcv(struct sock *sk, struct sk_buff *skb,
|
||||
|
Loading…
Reference in New Issue
Block a user