diff mbox series

[net-next,v3] tcp: enable mid stream window clamp

Message ID 20210825210117.1668371-1-ntspring@fb.com
State New
Headers show
Series [net-next,v3] tcp: enable mid stream window clamp | expand

Commit Message

Neil Spring Aug. 25, 2021, 9:01 p.m. UTC
The TCP_WINDOW_CLAMP socket option is defined in tcp(7) to "Bound the size
of the advertised window to this value."  Window clamping is distributed
across two variables, window_clamp ("Maximal window to advertise" in
tcp.h) and rcv_ssthresh ("Current window clamp").

This patch updates the function where the window clamp is set to also
reduce the current window clamp, rcv_sshthresh, if needed.  With this,
setting the TCP_WINDOW_CLAMP option has the documented effect of limiting
the window.

Signed-off-by: Neil Spring <ntspring@fb.com>
---
v2: - fix email formatting

v3: - address comments by setting rcv_ssthresh based on prior window 

 net/ipv4/tcp.c | 1 +
 1 file changed, 1 insertion(+)

Comments

Yuchung Cheng Aug. 26, 2021, 7:11 p.m. UTC | #1
On Wed, Aug 25, 2021 at 2:02 PM Neil Spring <ntspring@fb.com> wrote:
>

> The TCP_WINDOW_CLAMP socket option is defined in tcp(7) to "Bound the size

> of the advertised window to this value."  Window clamping is distributed

> across two variables, window_clamp ("Maximal window to advertise" in

> tcp.h) and rcv_ssthresh ("Current window clamp").

>

> This patch updates the function where the window clamp is set to also

> reduce the current window clamp, rcv_sshthresh, if needed.  With this,

> setting the TCP_WINDOW_CLAMP option has the documented effect of limiting

> the window.

This patch looks like a bug-fix so it should be applied to net not net-next?

>

> Signed-off-by: Neil Spring <ntspring@fb.com>

> ---

> v2: - fix email formatting

>

> v3: - address comments by setting rcv_ssthresh based on prior window

>

>  net/ipv4/tcp.c | 1 +

>  1 file changed, 1 insertion(+)

>

> diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c

> index f931def6302e..e8b48df73c85 100644

> --- a/net/ipv4/tcp.c

> +++ b/net/ipv4/tcp.c

> @@ -3338,6 +3338,7 @@ int tcp_set_window_clamp(struct sock *sk, int val)

>         } else {

>                 tp->window_clamp = val < SOCK_MIN_RCVBUF / 2 ?

>                         SOCK_MIN_RCVBUF / 2 : val;

> +               tp->rcv_ssthresh = min(tp->rcv_wnd, tp->window_clamp);

>         }

>         return 0;

>  }

> --

> 2.30.2

>
Eric Dumazet Aug. 26, 2021, 7:32 p.m. UTC | #2
On Thu, Aug 26, 2021 at 12:11 PM Yuchung Cheng <ycheng@google.com> wrote:
>

> On Wed, Aug 25, 2021 at 2:02 PM Neil Spring <ntspring@fb.com> wrote:

> >

> > The TCP_WINDOW_CLAMP socket option is defined in tcp(7) to "Bound the size

> > of the advertised window to this value."  Window clamping is distributed

> > across two variables, window_clamp ("Maximal window to advertise" in

> > tcp.h) and rcv_ssthresh ("Current window clamp").

> >

> > This patch updates the function where the window clamp is set to also

> > reduce the current window clamp, rcv_sshthresh, if needed.  With this,

> > setting the TCP_WINDOW_CLAMP option has the documented effect of limiting

> > the window.

> This patch looks like a bug-fix so it should be applied to net not net-next?


It seems TCP_WINDOW_CLAMP never worked in this context, not sure
if any application was expecting it to work.

Note that if we target net tree, we would like a Fixes: tag.

I will give my SOB a bit later in the day, I have to run some errands.

Thanks.
Eric Dumazet Aug. 26, 2021, 10:51 p.m. UTC | #3
On 8/25/21 2:01 PM, Neil Spring wrote:
> The TCP_WINDOW_CLAMP socket option is defined in tcp(7) to "Bound the size

> of the advertised window to this value."  Window clamping is distributed

> across two variables, window_clamp ("Maximal window to advertise" in

> tcp.h) and rcv_ssthresh ("Current window clamp").

> 

> This patch updates the function where the window clamp is set to also

> reduce the current window clamp, rcv_sshthresh, if needed.  With this,

> setting the TCP_WINDOW_CLAMP option has the documented effect of limiting

> the window.

> 

> Signed-off-by: Neil Spring <ntspring@fb.com>

> ---

> v2: - fix email formatting

> 

> v3: - address comments by setting rcv_ssthresh based on prior window 

> 


SGTM, thanks.

Signed-off-by: Eric Dumazet <edumazet@google.com>
patchwork-bot+netdevbpf@kernel.org Aug. 27, 2021, 2 a.m. UTC | #4
Hello:

This patch was applied to netdev/net-next.git (refs/heads/master):

On Wed, 25 Aug 2021 14:01:17 -0700 you wrote:
> The TCP_WINDOW_CLAMP socket option is defined in tcp(7) to "Bound the size

> of the advertised window to this value."  Window clamping is distributed

> across two variables, window_clamp ("Maximal window to advertise" in

> tcp.h) and rcv_ssthresh ("Current window clamp").

> 

> This patch updates the function where the window clamp is set to also

> reduce the current window clamp, rcv_sshthresh, if needed.  With this,

> setting the TCP_WINDOW_CLAMP option has the documented effect of limiting

> the window.

> 

> [...]


Here is the summary with links:
  - [net-next,v3] tcp: enable mid stream window clamp
    https://git.kernel.org/netdev/net-next/c/3aa7857fe1d7

You are awesome, thank you!
--
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html
diff mbox series

Patch

diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c
index f931def6302e..e8b48df73c85 100644
--- a/net/ipv4/tcp.c
+++ b/net/ipv4/tcp.c
@@ -3338,6 +3338,7 @@  int tcp_set_window_clamp(struct sock *sk, int val)
 	} else {
 		tp->window_clamp = val < SOCK_MIN_RCVBUF / 2 ?
 			SOCK_MIN_RCVBUF / 2 : val;
+		tp->rcv_ssthresh = min(tp->rcv_wnd, tp->window_clamp);
 	}
 	return 0;
 }