Commit 63ad7dfe authored by Eric Dumazet's avatar Eric Dumazet Committed by Jakub Kicinski
Browse files

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: default avatarEric Dumazet <edumazet@google.com>
Link: https://patch.msgid.link/20250513193919.1089692-4-edumazet@google.com


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent 65c52878
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -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,