Message ID | 20250102171426.915276-1-dzq.aishenghu0@gmail.com (mailing list archive) |
---|---|
State | Accepted |
Commit | 3479c7549fb1dfa7a1db4efb7347c7b8ef50de4b |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | tcp/dccp: allow a connection when sk_max_ack_backlog is zero | expand |
From: Zhongqiu Duan <dzq.aishenghu0@gmail.com> Date: Thu, 2 Jan 2025 17:14:26 +0000 > If the backlog of listen() is set to zero, sk_acceptq_is_full() allows > one connection to be made, but inet_csk_reqsk_queue_is_full() does not. > When the net.ipv4.tcp_syncookies is zero, inet_csk_reqsk_queue_is_full() > will cause an immediate drop before the sk_acceptq_is_full() check in > tcp_conn_request(), resulting in no connection can be made. > > This patch tries to keep consistent with 64a146513f8f ("[NET]: Revert > incorrect accept queue backlog changes."). > > Link: https://lore.kernel.org/netdev/20250102080258.53858-1-kuniyu@amazon.com/ > Fixes: ef547f2ac16b ("tcp: remove max_qlen_log") > Signed-off-by: Zhongqiu Duan <dzq.aishenghu0@gmail.com> Reviewed-by: Kuniyuki Iwashima <kuniyu@amazon.com> > --- > include/net/inet_connection_sock.h | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/include/net/inet_connection_sock.h b/include/net/inet_connection_sock.h > index 3c82fad904d4..c7f42844c79a 100644 > --- a/include/net/inet_connection_sock.h > +++ b/include/net/inet_connection_sock.h > @@ -282,7 +282,7 @@ static inline int inet_csk_reqsk_queue_len(const struct sock *sk) > > static inline int inet_csk_reqsk_queue_is_full(const struct sock *sk) > { > - return inet_csk_reqsk_queue_len(sk) >= READ_ONCE(sk->sk_max_ack_backlog); > + return inet_csk_reqsk_queue_len(sk) > READ_ONCE(sk->sk_max_ack_backlog); > } > > bool inet_csk_reqsk_queue_drop(struct sock *sk, struct request_sock *req); > -- > 2.34.1 >
On Fri, Jan 3, 2025 at 1:14 AM Zhongqiu Duan <dzq.aishenghu0@gmail.com> wrote: > > If the backlog of listen() is set to zero, sk_acceptq_is_full() allows > one connection to be made, but inet_csk_reqsk_queue_is_full() does not. > When the net.ipv4.tcp_syncookies is zero, inet_csk_reqsk_queue_is_full() > will cause an immediate drop before the sk_acceptq_is_full() check in > tcp_conn_request(), resulting in no connection can be made. > > This patch tries to keep consistent with 64a146513f8f ("[NET]: Revert > incorrect accept queue backlog changes."). > > Link: https://lore.kernel.org/netdev/20250102080258.53858-1-kuniyu@amazon.com/ > Fixes: ef547f2ac16b ("tcp: remove max_qlen_log") > Signed-off-by: Zhongqiu Duan <dzq.aishenghu0@gmail.com> Reviewed-by: Jason Xing <kerneljasonxing@gmail.com>
On Sat, Jan 4, 2025 at 2:23 AM Jason Xing <kerneljasonxing@gmail.com> wrote: > > On Fri, Jan 3, 2025 at 1:14 AM Zhongqiu Duan <dzq.aishenghu0@gmail.com> wrote: > > > > If the backlog of listen() is set to zero, sk_acceptq_is_full() allows > > one connection to be made, but inet_csk_reqsk_queue_is_full() does not. > > When the net.ipv4.tcp_syncookies is zero, inet_csk_reqsk_queue_is_full() > > will cause an immediate drop before the sk_acceptq_is_full() check in > > tcp_conn_request(), resulting in no connection can be made. > > > > This patch tries to keep consistent with 64a146513f8f ("[NET]: Revert > > incorrect accept queue backlog changes."). > > > > Link: https://lore.kernel.org/netdev/20250102080258.53858-1-kuniyu@amazon.com/ > > Fixes: ef547f2ac16b ("tcp: remove max_qlen_log") > > Signed-off-by: Zhongqiu Duan <dzq.aishenghu0@gmail.com> > > Reviewed-by: Jason Xing <kerneljasonxing@gmail.com> Reviewed-by: Eric Dumazet <edumazet@google.com>
Hello: This patch was applied to netdev/net.git (main) by Jakub Kicinski <kuba@kernel.org>: On Thu, 2 Jan 2025 17:14:26 +0000 you wrote: > If the backlog of listen() is set to zero, sk_acceptq_is_full() allows > one connection to be made, but inet_csk_reqsk_queue_is_full() does not. > When the net.ipv4.tcp_syncookies is zero, inet_csk_reqsk_queue_is_full() > will cause an immediate drop before the sk_acceptq_is_full() check in > tcp_conn_request(), resulting in no connection can be made. > > This patch tries to keep consistent with 64a146513f8f ("[NET]: Revert > incorrect accept queue backlog changes."). > > [...] Here is the summary with links: - tcp/dccp: allow a connection when sk_max_ack_backlog is zero https://git.kernel.org/netdev/net/c/3479c7549fb1 You are awesome, thank you!
diff --git a/include/net/inet_connection_sock.h b/include/net/inet_connection_sock.h index 3c82fad904d4..c7f42844c79a 100644 --- a/include/net/inet_connection_sock.h +++ b/include/net/inet_connection_sock.h @@ -282,7 +282,7 @@ static inline int inet_csk_reqsk_queue_len(const struct sock *sk) static inline int inet_csk_reqsk_queue_is_full(const struct sock *sk) { - return inet_csk_reqsk_queue_len(sk) >= READ_ONCE(sk->sk_max_ack_backlog); + return inet_csk_reqsk_queue_len(sk) > READ_ONCE(sk->sk_max_ack_backlog); } bool inet_csk_reqsk_queue_drop(struct sock *sk, struct request_sock *req);
If the backlog of listen() is set to zero, sk_acceptq_is_full() allows one connection to be made, but inet_csk_reqsk_queue_is_full() does not. When the net.ipv4.tcp_syncookies is zero, inet_csk_reqsk_queue_is_full() will cause an immediate drop before the sk_acceptq_is_full() check in tcp_conn_request(), resulting in no connection can be made. This patch tries to keep consistent with 64a146513f8f ("[NET]: Revert incorrect accept queue backlog changes."). Link: https://lore.kernel.org/netdev/20250102080258.53858-1-kuniyu@amazon.com/ Fixes: ef547f2ac16b ("tcp: remove max_qlen_log") Signed-off-by: Zhongqiu Duan <dzq.aishenghu0@gmail.com> --- include/net/inet_connection_sock.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)