From nobody Tue Feb 10 07:01:38 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3B7C931A57A; Tue, 28 Oct 2025 11:58:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761652705; cv=none; b=hyLuugxraY7bPNb0UGpzselrdPK95+BbU+Ju7YEHaXjALWE6TTG9vqBJU5/d2yf1UjQCN/wfAFp/Fal4FX1voPGRtxJ8i5ooL+PdXsmdkzHRjzDafjRUmk4QsuXUMWmJwbAE9fUsmtkX0MPCjtUrwMheQ0qHXkgACGrYRuoB1tE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761652705; c=relaxed/simple; bh=GmHXkdInkwrHHB/fwx6KL5afGG/UEzE3X5JMsjJco6s=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=JpyCjFrG9Lj3FVWzK9YLk8I7ogCv3t+2U+cub6ksqcAmwBXXdY6YOdbhyAOJ5Ymdwz2/QjuFKEO05+t76ykzTbWieR8srsgaSULU+lufv7vgtR3LzKki1dX5DVszxwUvvS3C7sfVspqIRmQeZNMiZ2IN4m8FFB8gsfYlaMYdz1Q= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=p5tu+un5; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="p5tu+un5" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 70F2AC4CEE7; Tue, 28 Oct 2025 11:58:22 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1761652704; bh=GmHXkdInkwrHHB/fwx6KL5afGG/UEzE3X5JMsjJco6s=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=p5tu+un5af7ooxSB3AUPMJ2Yr0lOwUut9mirp3q1nYyebICWrUHh77iNWS/8rFgGx 9Ecs+fWl0yswAVGaJt945EUO7ZWzSVpAvmOIZNjbhquIhshVOkm1FESP3Qn76RycHn Xi2TT5x/tNR8lpXXontQdu9M6ioGk3H7ViPdTl35Jjl8DKRQ7oS5fAP4ubx4C9VjKm 3x4ahhTMxODX5OMYPjczb4Wvp5uPaW9vP2OHjVP17V7R6VOVaGjA1oRbXLidmBq0a1 efMaGNPaZ4WIsOkv2tBNHfrEeJqeanHZPCNuK8/CEDobXG6u7OoCqFWhrAwzZrY6QS 7+t78T0MT4MRA== From: "Matthieu Baerts (NGI0)" Date: Tue, 28 Oct 2025 12:58:02 +0100 Subject: [PATCH net v3 4/4] tcp: fix too slow tcp_rcvbuf_grow() action Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251028-net-tcp-recv-autotune-v3-4-74b43ba4c84c@kernel.org> References: <20251028-net-tcp-recv-autotune-v3-0-74b43ba4c84c@kernel.org> In-Reply-To: <20251028-net-tcp-recv-autotune-v3-0-74b43ba4c84c@kernel.org> To: Eric Dumazet , Neal Cardwell , Kuniyuki Iwashima , "David S. Miller" , Jakub Kicinski , Paolo Abeni , Simon Horman , David Ahern , Matthieu Baerts , Mat Martineau , Geliang Tang Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, mptcp@lists.linux.dev X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=12065; i=matttbe@kernel.org; h=from:subject:message-id; bh=h92uSafpnw8i/Qp5co+OjVSTK8rmje1D218J6OdeVuA=; b=owGbwMvMwCVWo/Th0Gd3rumMp9WSGDIZ1l9cWqOeHsMu9H8Tf9ULa9ar95Wk9B8WqL3L8gspF eU40SPSUcrCIMbFICumyCLdFpk/83kVb4mXnwXMHFYmkCEMXJwCMJGaMEaGH6ldWzZ1xnK966ya dLws/peUX3F2O59cP9PW/euW2izNZfgft0B1/fNrtab2JpkCkavT5Jf4muTcXZBl2MA482f1MzU eAA== X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 From: Eric Dumazet While the blamed commits apparently avoided an overshoot, they also limited how fast a sender can increase BDP at each RTT. This is not exactly a revert, we do not add the 16 * tp->advmss cushion we had, and we are keeping the out_of_order_queue contribution. Do the same in mptcp_rcvbuf_grow(). Tested: emulated 50ms rtt (tcp_stream --tcp-tx-delay 50000), cubic 20 second flow. net.ipv4.tcp_rmem set to "4096 131072 67000000" perf record -a -e tcp:tcp_rcvbuf_grow sleep 20 perf script Before: We can see we fail to roughly double RWIN at each RTT. Sender is RWIN limited while CWND is ramping up (before getting tcp_wmem limited). tcp_stream 33793 [010] 825.717525: tcp:tcp_rcvbuf_grow: time=3D100869 rtt_= us=3D50428 copied=3D49152 inq=3D0 space=3D40960 ooo=3D0 scaling_ratio=3D219= rcvbuf=3D131072 rcv_ssthresh=3D103970 window_clamp=3D112128 rcv_wnd=3D1064= 96 tcp_stream 33793 [010] 825.768966: tcp:tcp_rcvbuf_grow: time=3D51447 rtt_u= s=3D50362 copied=3D86016 inq=3D0 space=3D49152 ooo=3D0 scaling_ratio=3D219 = rcvbuf=3D131072 rcv_ssthresh=3D107474 window_clamp=3D112128 rcv_wnd=3D106496 tcp_stream 33793 [010] 825.821539: tcp:tcp_rcvbuf_grow: time=3D52577 rtt_u= s=3D50243 copied=3D114688 inq=3D0 space=3D86016 ooo=3D0 scaling_ratio=3D219= rcvbuf=3D201096 rcv_ssthresh=3D167377 window_clamp=3D172031 rcv_wnd=3D1679= 36 tcp_stream 33793 [010] 825.871781: tcp:tcp_rcvbuf_grow: time=3D50248 rtt_u= s=3D50237 copied=3D167936 inq=3D0 space=3D114688 ooo=3D0 scaling_ratio=3D21= 9 rcvbuf=3D268129 rcv_ssthresh=3D224722 window_clamp=3D229375 rcv_wnd=3D225= 280 tcp_stream 33793 [010] 825.922475: tcp:tcp_rcvbuf_grow: time=3D50698 rtt_u= s=3D50183 copied=3D241664 inq=3D0 space=3D167936 ooo=3D0 scaling_ratio=3D21= 9 rcvbuf=3D392617 rcv_ssthresh=3D331217 window_clamp=3D335871 rcv_wnd=3D323= 584 tcp_stream 33793 [010] 825.973326: tcp:tcp_rcvbuf_grow: time=3D50855 rtt_u= s=3D50213 copied=3D339968 inq=3D0 space=3D241664 ooo=3D0 scaling_ratio=3D21= 9 rcvbuf=3D564986 rcv_ssthresh=3D478674 window_clamp=3D483327 rcv_wnd=3D462= 848 tcp_stream 33793 [010] 826.023970: tcp:tcp_rcvbuf_grow: time=3D50647 rtt_u= s=3D50248 copied=3D491520 inq=3D0 space=3D339968 ooo=3D0 scaling_ratio=3D21= 9 rcvbuf=3D794811 rcv_ssthresh=3D671778 window_clamp=3D679935 rcv_wnd=3D651= 264 tcp_stream 33793 [010] 826.074612: tcp:tcp_rcvbuf_grow: time=3D50648 rtt_u= s=3D50227 copied=3D700416 inq=3D0 space=3D491520 ooo=3D0 scaling_ratio=3D21= 9 rcvbuf=3D1149124 rcv_ssthresh=3D974881 window_clamp=3D983039 rcv_wnd=3D94= 2080 tcp_stream 33793 [010] 826.125452: tcp:tcp_rcvbuf_grow: time=3D50845 rtt_u= s=3D50225 copied=3D987136 inq=3D8192 space=3D700416 ooo=3D0 scaling_ratio= =3D219 rcvbuf=3D1637502 rcv_ssthresh=3D1392674 window_clamp=3D1400831 rcv_w= nd=3D1339392 tcp_stream 33793 [010] 826.175698: tcp:tcp_rcvbuf_grow: time=3D50250 rtt_u= s=3D50198 copied=3D1347584 inq=3D0 space=3D978944 ooo=3D0 scaling_ratio=3D2= 19 rcvbuf=3D2288672 rcv_ssthresh=3D1949729 window_clamp=3D1957887 rcv_wnd= =3D1945600 tcp_stream 33793 [010] 826.225947: tcp:tcp_rcvbuf_grow: time=3D50252 rtt_u= s=3D50240 copied=3D1945600 inq=3D0 space=3D1347584 ooo=3D0 scaling_ratio=3D= 219 rcvbuf=3D3150516 rcv_ssthresh=3D2687010 window_clamp=3D2695167 rcv_wnd= =3D2691072 tcp_stream 33793 [010] 826.276175: tcp:tcp_rcvbuf_grow: time=3D50233 rtt_u= s=3D50224 copied=3D2691072 inq=3D0 space=3D1945600 ooo=3D0 scaling_ratio=3D= 219 rcvbuf=3D4548617 rcv_ssthresh=3D3883041 window_clamp=3D3891199 rcv_wnd= =3D3887104 tcp_stream 33793 [010] 826.326403: tcp:tcp_rcvbuf_grow: time=3D50233 rtt_u= s=3D50229 copied=3D3887104 inq=3D0 space=3D2691072 ooo=3D0 scaling_ratio=3D= 219 rcvbuf=3D6291456 rcv_ssthresh=3D5370482 window_clamp=3D5382144 rcv_wnd= =3D5373952 tcp_stream 33793 [010] 826.376723: tcp:tcp_rcvbuf_grow: time=3D50323 rtt_u= s=3D50218 copied=3D5373952 inq=3D0 space=3D3887104 ooo=3D0 scaling_ratio=3D= 219 rcvbuf=3D9087658 rcv_ssthresh=3D7755537 window_clamp=3D7774207 rcv_wnd= =3D7757824 tcp_stream 33793 [010] 826.426991: tcp:tcp_rcvbuf_grow: time=3D50274 rtt_u= s=3D50196 copied=3D7757824 inq=3D180224 space=3D5373952 ooo=3D0 scaling_rat= io=3D219 rcvbuf=3D12563759 rcv_ssthresh=3D10729233 window_clamp=3D10747903 = rcv_wnd=3D10575872 tcp_stream 33793 [010] 826.477229: tcp:tcp_rcvbuf_grow: time=3D50241 rtt_u= s=3D50078 copied=3D10731520 inq=3D180224 space=3D7577600 ooo=3D0 scaling_ra= tio=3D219 rcvbuf=3D17715667 rcv_ssthresh=3D15136529 window_clamp=3D15155199= rcv_wnd=3D14983168 tcp_stream 33793 [010] 826.527482: tcp:tcp_rcvbuf_grow: time=3D50258 rtt_u= s=3D50153 copied=3D15138816 inq=3D360448 space=3D10551296 ooo=3D0 scaling_r= atio=3D219 rcvbuf=3D24667870 rcv_ssthresh=3D21073410 window_clamp=3D2110259= 1 rcv_wnd=3D20766720 tcp_stream 33793 [010] 826.577712: tcp:tcp_rcvbuf_grow: time=3D50234 rtt_u= s=3D50228 copied=3D21073920 inq=3D0 space=3D14778368 ooo=3D0 scaling_ratio= =3D219 rcvbuf=3D34550339 rcv_ssthresh=3D29517041 window_clamp=3D29556735 rc= v_wnd=3D29519872 tcp_stream 33793 [010] 826.627982: tcp:tcp_rcvbuf_grow: time=3D50275 rtt_u= s=3D50220 copied=3D29519872 inq=3D540672 space=3D21073920 ooo=3D0 scaling_r= atio=3D219 rcvbuf=3D49268707 rcv_ssthresh=3D42090625 window_clamp=3D4214783= 9 rcv_wnd=3D41627648 tcp_stream 33793 [010] 826.678274: tcp:tcp_rcvbuf_grow: time=3D50296 rtt_u= s=3D50185 copied=3D42053632 inq=3D761856 space=3D28979200 ooo=3D0 scaling_r= atio=3D219 rcvbuf=3D67000000 rcv_ssthresh=3D57238168 window_clamp=3D5731640= 6 rcv_wnd=3D56606720 tcp_stream 33793 [010] 826.728627: tcp:tcp_rcvbuf_grow: time=3D50357 rtt_u= s=3D50128 copied=3D43913216 inq=3D851968 space=3D41291776 ooo=3D0 scaling_r= atio=3D219 rcvbuf=3D67000000 rcv_ssthresh=3D57290728 window_clamp=3D5731640= 6 rcv_wnd=3D56524800 tcp_stream 33793 [010] 827.131364: tcp:tcp_rcvbuf_grow: time=3D50239 rtt_u= s=3D50127 copied=3D43843584 inq=3D655360 space=3D43061248 ooo=3D0 scaling_r= atio=3D219 rcvbuf=3D67000000 rcv_ssthresh=3D57290728 window_clamp=3D5731640= 6 rcv_wnd=3D56696832 tcp_stream 33793 [010] 827.181613: tcp:tcp_rcvbuf_grow: time=3D50254 rtt_u= s=3D50115 copied=3D43843584 inq=3D524288 space=3D43188224 ooo=3D0 scaling_r= atio=3D219 rcvbuf=3D67000000 rcv_ssthresh=3D57290728 window_clamp=3D5731640= 6 rcv_wnd=3D56807424 tcp_stream 33793 [010] 828.339635: tcp:tcp_rcvbuf_grow: time=3D50283 rtt_u= s=3D50110 copied=3D43843584 inq=3D458752 space=3D43319296 ooo=3D0 scaling_r= atio=3D219 rcvbuf=3D67000000 rcv_ssthresh=3D57290728 window_clamp=3D5731640= 6 rcv_wnd=3D56864768 tcp_stream 33793 [010] 828.440350: tcp:tcp_rcvbuf_grow: time=3D50404 rtt_u= s=3D50099 copied=3D43843584 inq=3D393216 space=3D43384832 ooo=3D0 scaling_r= atio=3D219 rcvbuf=3D67000000 rcv_ssthresh=3D57290728 window_clamp=3D5731640= 6 rcv_wnd=3D56922112 tcp_stream 33793 [010] 829.195106: tcp:tcp_rcvbuf_grow: time=3D50154 rtt_u= s=3D50077 copied=3D43843584 inq=3D196608 space=3D43450368 ooo=3D0 scaling_r= atio=3D219 rcvbuf=3D67000000 rcv_ssthresh=3D57290728 window_clamp=3D5731640= 6 rcv_wnd=3D57090048 After: It takes few steps to increase RWIN. Sender is no longer RWIN limited. tcp_stream 50826 [010] 935.634212: tcp:tcp_rcvbuf_grow: time=3D100788 rtt_= us=3D50315 copied=3D49152 inq=3D0 space=3D40960 ooo=3D0 scaling_ratio=3D219= rcvbuf=3D131072 rcv_ssthresh=3D103970 window_clamp=3D112128 rcv_wnd=3D1064= 96 tcp_stream 50826 [010] 935.685642: tcp:tcp_rcvbuf_grow: time=3D51437 rtt_u= s=3D50361 copied=3D86016 inq=3D0 space=3D49152 ooo=3D0 scaling_ratio=3D219 = rcvbuf=3D160875 rcv_ssthresh=3D132969 window_clamp=3D137623 rcv_wnd=3D131072 tcp_stream 50826 [010] 935.738299: tcp:tcp_rcvbuf_grow: time=3D52660 rtt_u= s=3D50256 copied=3D139264 inq=3D0 space=3D86016 ooo=3D0 scaling_ratio=3D219= rcvbuf=3D502741 rcv_ssthresh=3D411497 window_clamp=3D430079 rcv_wnd=3D4136= 96 tcp_stream 50826 [010] 935.788544: tcp:tcp_rcvbuf_grow: time=3D50249 rtt_u= s=3D50233 copied=3D307200 inq=3D0 space=3D139264 ooo=3D0 scaling_ratio=3D21= 9 rcvbuf=3D728690 rcv_ssthresh=3D618717 window_clamp=3D623371 rcv_wnd=3D618= 496 tcp_stream 50826 [010] 935.838796: tcp:tcp_rcvbuf_grow: time=3D50258 rtt_u= s=3D50202 copied=3D618496 inq=3D0 space=3D307200 ooo=3D0 scaling_ratio=3D21= 9 rcvbuf=3D2450338 rcv_ssthresh=3D1855709 window_clamp=3D2096187 rcv_wnd=3D= 1859584 tcp_stream 50826 [010] 935.889140: tcp:tcp_rcvbuf_grow: time=3D50347 rtt_u= s=3D50166 copied=3D1261568 inq=3D0 space=3D618496 ooo=3D0 scaling_ratio=3D2= 19 rcvbuf=3D4376503 rcv_ssthresh=3D3725291 window_clamp=3D3743961 rcv_wnd= =3D3706880 tcp_stream 50826 [010] 935.939435: tcp:tcp_rcvbuf_grow: time=3D50300 rtt_u= s=3D50185 copied=3D2478080 inq=3D24576 space=3D1261568 ooo=3D0 scaling_rati= o=3D219 rcvbuf=3D9082648 rcv_ssthresh=3D7733731 window_clamp=3D7769921 rcv_= wnd=3D7692288 tcp_stream 50826 [010] 935.989681: tcp:tcp_rcvbuf_grow: time=3D50251 rtt_u= s=3D50221 copied=3D4915200 inq=3D114688 space=3D2453504 ooo=3D0 scaling_rat= io=3D219 rcvbuf=3D16574936 rcv_ssthresh=3D14108110 window_clamp=3D14179339 = rcv_wnd=3D14024704 tcp_stream 50826 [010] 936.039967: tcp:tcp_rcvbuf_grow: time=3D50289 rtt_u= s=3D50279 copied=3D9830400 inq=3D114688 space=3D4800512 ooo=3D0 scaling_rat= io=3D219 rcvbuf=3D32695050 rcv_ssthresh=3D27896187 window_clamp=3D27969593 = rcv_wnd=3D27815936 tcp_stream 50826 [010] 936.090172: tcp:tcp_rcvbuf_grow: time=3D50211 rtt_u= s=3D50200 copied=3D19841024 inq=3D114688 space=3D9715712 ooo=3D0 scaling_ra= tio=3D219 rcvbuf=3D67000000 rcv_ssthresh=3D57245176 window_clamp=3D57316406= rcv_wnd=3D57163776 tcp_stream 50826 [010] 936.140430: tcp:tcp_rcvbuf_grow: time=3D50262 rtt_u= s=3D50197 copied=3D39501824 inq=3D114688 space=3D19726336 ooo=3D0 scaling_r= atio=3D219 rcvbuf=3D67000000 rcv_ssthresh=3D57245176 window_clamp=3D5731640= 6 rcv_wnd=3D57163776 tcp_stream 50826 [010] 936.190527: tcp:tcp_rcvbuf_grow: time=3D50101 rtt_u= s=3D50071 copied=3D43655168 inq=3D262144 space=3D39387136 ooo=3D0 scaling_r= atio=3D219 rcvbuf=3D67000000 rcv_ssthresh=3D57259192 window_clamp=3D5731640= 6 rcv_wnd=3D57032704 tcp_stream 50826 [010] 936.240719: tcp:tcp_rcvbuf_grow: time=3D50197 rtt_u= s=3D50057 copied=3D43843584 inq=3D262144 space=3D43393024 ooo=3D0 scaling_r= atio=3D219 rcvbuf=3D67000000 rcv_ssthresh=3D57259192 window_clamp=3D5731640= 6 rcv_wnd=3D57032704 tcp_stream 50826 [010] 936.341271: tcp:tcp_rcvbuf_grow: time=3D50297 rtt_u= s=3D50123 copied=3D43843584 inq=3D131072 space=3D43581440 ooo=3D0 scaling_r= atio=3D219 rcvbuf=3D67000000 rcv_ssthresh=3D57259192 window_clamp=3D5731640= 6 rcv_wnd=3D57147392 tcp_stream 50826 [010] 936.642503: tcp:tcp_rcvbuf_grow: time=3D50131 rtt_u= s=3D50084 copied=3D43843584 inq=3D0 space=3D43712512 ooo=3D0 scaling_ratio= =3D219 rcvbuf=3D67000000 rcv_ssthresh=3D57259192 window_clamp=3D57316406 rc= v_wnd=3D57262080 Fixes: 65c5287892e9 ("tcp: fix sk_rcvbuf overshoot") Fixes: e118cdc34dd1 ("mptcp: rcvbuf auto-tuning improvement") Reported-by: Neal Cardwell Signed-off-by: Eric Dumazet Closes: https://github.com/multipath-tcp/mptcp_net-next/issues/589 Signed-off-by: Matthieu Baerts (NGI0) Reviewed-by: Neal Cardwell --- net/ipv4/tcp_input.c | 11 +++++++++-- net/mptcp/protocol.c | 10 +++++++++- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c index cb4e07f84ae2..e4a979b75cc6 100644 --- a/net/ipv4/tcp_input.c +++ b/net/ipv4/tcp_input.c @@ -895,17 +895,24 @@ void tcp_rcvbuf_grow(struct sock *sk, u32 newval) { const struct net *net =3D sock_net(sk); struct tcp_sock *tp =3D tcp_sk(sk); - u32 rcvwin, rcvbuf, cap; + u32 rcvwin, rcvbuf, cap, oldval; + u64 grow; =20 + oldval =3D tp->rcvq_space.space; tp->rcvq_space.space =3D newval; =20 if (!READ_ONCE(net->ipv4.sysctl_tcp_moderate_rcvbuf) || (sk->sk_userlocks & SOCK_RCVBUF_LOCK)) return; =20 - /* slow start: allow the sender to double its rate. */ + /* DRS is always one RTT late. */ rcvwin =3D newval << 1; =20 + /* slow start: allow the sender to double its rate. */ + grow =3D (u64)rcvwin * (newval - oldval); + do_div(grow, oldval); + rcvwin +=3D grow << 1; + if (!RB_EMPTY_ROOT(&tp->out_of_order_queue)) rcvwin +=3D TCP_SKB_CB(tp->ooo_last_skb)->end_seq - tp->rcv_nxt; =20 diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c index 052a0c62023f..875027b9319c 100644 --- a/net/mptcp/protocol.c +++ b/net/mptcp/protocol.c @@ -198,15 +198,23 @@ static bool mptcp_rcvbuf_grow(struct sock *sk, u32 ne= wval) { struct mptcp_sock *msk =3D mptcp_sk(sk); const struct net *net =3D sock_net(sk); - u32 rcvwin, rcvbuf, cap; + u32 rcvwin, rcvbuf, cap, oldval; + u64 grow; =20 + oldval =3D msk->rcvq_space.space; msk->rcvq_space.space =3D newval; if (!READ_ONCE(net->ipv4.sysctl_tcp_moderate_rcvbuf) || (sk->sk_userlocks & SOCK_RCVBUF_LOCK)) return false; =20 + /* DRS is always one RTT late. */ rcvwin =3D newval << 1; =20 + /* slow start: allow the sender to double its rate. */ + grow =3D (u64)rcvwin * (newval - oldval); + do_div(grow, oldval); + rcvwin +=3D grow << 1; + if (!RB_EMPTY_ROOT(&msk->out_of_order_queue)) rcvwin +=3D MPTCP_SKB_CB(msk->ooo_last_skb)->end_seq - msk->ack_seq; =20 --=20 2.51.0