linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH net-next] inet: do not set backlog if listen fails
@ 2018-10-03 15:07 Yafang Shao
  2018-10-03 15:41 ` Eric Dumazet
  0 siblings, 1 reply; 3+ messages in thread
From: Yafang Shao @ 2018-10-03 15:07 UTC (permalink / raw)
  To: edumazet, davem; +Cc: netdev, linux-kernel, Yafang Shao

These two backlog members are not necessary set in inet_csk_listen_start().
Regarding sk_max_ack_backlog, it will be set in the caller inet_listen
and dccp_listen_start.
Regraing sk_ack_backlog, it is better to put it together with
sk_max_ack_backlog in the same function and only set on success.

Signed-off-by: Yafang Shao <laoar.shao@gmail.com>
---
 net/dccp/proto.c                | 1 +
 net/ipv4/af_inet.c              | 1 +
 net/ipv4/inet_connection_sock.c | 3 ---
 3 files changed, 2 insertions(+), 3 deletions(-)

diff --git a/net/dccp/proto.c b/net/dccp/proto.c
index 875858c..34d48cd 100644
--- a/net/dccp/proto.c
+++ b/net/dccp/proto.c
@@ -959,6 +959,7 @@ int inet_dccp_listen(struct socket *sock, int backlog)
 		err = dccp_listen_start(sk, backlog);
 		if (err)
 			goto out;
+		sk->sk_ack_backlog = 0;
 	}
 	sk->sk_max_ack_backlog = backlog;
 	err = 0;
diff --git a/net/ipv4/af_inet.c b/net/ipv4/af_inet.c
index 1fbe2f8..9690e0d 100644
--- a/net/ipv4/af_inet.c
+++ b/net/ipv4/af_inet.c
@@ -230,6 +230,7 @@ int inet_listen(struct socket *sock, int backlog)
 		if (err)
 			goto out;
 		tcp_call_bpf(sk, BPF_SOCK_OPS_TCP_LISTEN_CB, 0, NULL);
+		sk->sk_ack_backlog = 0;
 	}
 	sk->sk_max_ack_backlog = backlog;
 	err = 0;
diff --git a/net/ipv4/inet_connection_sock.c b/net/ipv4/inet_connection_sock.c
index dfd5009..c25d0b3 100644
--- a/net/ipv4/inet_connection_sock.c
+++ b/net/ipv4/inet_connection_sock.c
@@ -870,9 +870,6 @@ int inet_csk_listen_start(struct sock *sk, int backlog)
 	int err = -EADDRINUSE;
 
 	reqsk_queue_alloc(&icsk->icsk_accept_queue);
-
-	sk->sk_max_ack_backlog = backlog;
-	sk->sk_ack_backlog = 0;
 	inet_csk_delack_init(sk);
 
 	/* There is race window here: we announce ourselves listening,
-- 
1.8.3.1


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH net-next] inet: do not set backlog if listen fails
  2018-10-03 15:07 [PATCH net-next] inet: do not set backlog if listen fails Yafang Shao
@ 2018-10-03 15:41 ` Eric Dumazet
  2018-10-05  1:54   ` Yafang Shao
  0 siblings, 1 reply; 3+ messages in thread
From: Eric Dumazet @ 2018-10-03 15:41 UTC (permalink / raw)
  To: Yafang Shao, edumazet, davem; +Cc: netdev, linux-kernel



On 10/03/2018 08:07 AM, Yafang Shao wrote:
> These two backlog members are not necessary set in inet_csk_listen_start().
> Regarding sk_max_ack_backlog, it will be set in the caller inet_listen
> and dccp_listen_start.
> Regraing sk_ack_backlog, it is better to put it together with
> sk_max_ack_backlog in the same function and only set on success.
> 
> Signed-off-by: Yafang Shao <laoar.shao@gmail.com>
> ---
>  net/dccp/proto.c                | 1 +
>  net/ipv4/af_inet.c              | 1 +
>  net/ipv4/inet_connection_sock.c | 3 ---
>  3 files changed, 2 insertions(+), 3 deletions(-)
> 
> diff --git a/net/dccp/proto.c b/net/dccp/proto.c
> index 875858c..34d48cd 100644
> --- a/net/dccp/proto.c
> +++ b/net/dccp/proto.c
> @@ -959,6 +959,7 @@ int inet_dccp_listen(struct socket *sock, int backlog)
>  		err = dccp_listen_start(sk, backlog);
>  		if (err)
>  			goto out;
> +		sk->sk_ack_backlog = 0;


This is racy, remember that dccp and tcp have lockless listeners.

Do not change sk_ack_backlog after a TCP/DCCP socket is ready to accept new flows.

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH net-next] inet: do not set backlog if listen fails
  2018-10-03 15:41 ` Eric Dumazet
@ 2018-10-05  1:54   ` Yafang Shao
  0 siblings, 0 replies; 3+ messages in thread
From: Yafang Shao @ 2018-10-05  1:54 UTC (permalink / raw)
  To: Eric Dumazet; +Cc: Eric Dumazet, David Miller, netdev, LKML

On Wed, Oct 3, 2018 at 11:41 PM Eric Dumazet <eric.dumazet@gmail.com> wrote:
>
>
>
> On 10/03/2018 08:07 AM, Yafang Shao wrote:
> > These two backlog members are not necessary set in inet_csk_listen_start().
> > Regarding sk_max_ack_backlog, it will be set in the caller inet_listen
> > and dccp_listen_start.
> > Regraing sk_ack_backlog, it is better to put it together with
> > sk_max_ack_backlog in the same function and only set on success.
> >
> > Signed-off-by: Yafang Shao <laoar.shao@gmail.com>
> > ---
> >  net/dccp/proto.c                | 1 +
> >  net/ipv4/af_inet.c              | 1 +
> >  net/ipv4/inet_connection_sock.c | 3 ---
> >  3 files changed, 2 insertions(+), 3 deletions(-)
> >
> > diff --git a/net/dccp/proto.c b/net/dccp/proto.c
> > index 875858c..34d48cd 100644
> > --- a/net/dccp/proto.c
> > +++ b/net/dccp/proto.c
> > @@ -959,6 +959,7 @@ int inet_dccp_listen(struct socket *sock, int backlog)
> >               err = dccp_listen_start(sk, backlog);
> >               if (err)
> >                       goto out;
> > +             sk->sk_ack_backlog = 0;
>
>
> This is racy, remember that dccp and tcp have lockless listeners.
>
> Do not change sk_ack_backlog after a TCP/DCCP socket is ready to accept new flows.

Understood. Thanks for your explanation.

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2018-10-05  1:55 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-10-03 15:07 [PATCH net-next] inet: do not set backlog if listen fails Yafang Shao
2018-10-03 15:41 ` Eric Dumazet
2018-10-05  1:54   ` Yafang Shao

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).