[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20260125070651.207042-5-achender@kernel.org>
Date: Sun, 25 Jan 2026 00:06:48 -0700
From: Allison Henderson <achender@...nel.org>
To: netdev@...r.kernel.org
Cc: linux-kselftest@...r.kernel.org,
pabeni@...hat.com,
edumazet@...gle.com,
rds-devel@....oracle.com,
kuba@...nel.org,
horms@...nel.org,
linux-rdma@...r.kernel.org,
allison.henderson@...cle.com
Subject: [PATCH net-next v1 4/7] net/rds: Kick-start TCP receiver after accept
From: Gerd Rausch <gerd.rausch@...cle.com>
In cases where the server (the node with the higher IP-address)
in an RDS/TCP connection is overwhelmed it is possible that the
socket that was just accepted is chock-full of messages, up to
the limit of what the socket receive buffer permits.
Subsequently, "rds_tcp_data_ready" won't be called anymore,
because there is no more space to receive additional messages.
Nor was it called prior to the point of calling "rds_tcp_set_callbacks",
because the "sk_data_ready" pointer didn't even point to
"rds_tcp_data_ready" yet.
We fix this by simply kick-starting the receive-worker
for all cases where the socket state is neither
"TCP_CLOSE_WAIT" nor "TCP_CLOSE".
Signed-off-by: Gerd Rausch <gerd.rausch@...cle.com>
Signed-off-by: Allison Henderson <allison.henderson@...cle.com>
---
net/rds/tcp_listen.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/net/rds/tcp_listen.c b/net/rds/tcp_listen.c
index ec54fc4a69018..c628f62421d4e 100644
--- a/net/rds/tcp_listen.c
+++ b/net/rds/tcp_listen.c
@@ -291,6 +291,8 @@ int rds_tcp_accept_one(struct rds_tcp_net *rtn)
new_sock->sk->sk_state == TCP_LAST_ACK ||
new_sock->sk->sk_state == TCP_CLOSE)
rds_conn_path_drop(cp, 0);
+ else
+ queue_delayed_work(cp->cp_wq, &cp->cp_recv_w, 0);
new_sock = NULL;
ret = 0;
--
2.43.0
Powered by blists - more mailing lists