aboutsummaryrefslogtreecommitdiff
path: root/net
diff options
context:
space:
mode:
authorGravatar Jens Axboe <axboe@kernel.dk> 2024-05-09 09:35:01 -0600
committerGravatar Jens Axboe <axboe@kernel.dk> 2024-05-13 18:19:20 -0600
commit7951e36ac620a9ba1bae0ac0ddd62d2e82285725 (patch)
tree1154f51ffebda2c624b11f73755dda2a86bc4b7d /net
parentnet: have do_accept() take a struct proto_accept_arg argument (diff)
downloadlinux-7951e36ac620a9ba1bae0ac0ddd62d2e82285725.tar.gz
linux-7951e36ac620a9ba1bae0ac0ddd62d2e82285725.tar.bz2
linux-7951e36ac620a9ba1bae0ac0ddd62d2e82285725.zip
net: pass back whether socket was empty post accept
This adds an 'is_empty' argument to struct proto_accept_arg, which can be used to pass back information on whether or not the given socket has more connections to accept post the one just accepted. To utilize this information, the caller should initialize the 'is_empty' field to, eg, -1 and then check for 0/1 after the accept. If the field has been set, the caller knows whether there are more pending connections or not. If the field remains -1 after the accept call, the protocol doesn't support passing back this information. This patch wires it up for ipv4/6 TCP. Acked-by: Jakub Kicinski <kuba@kernel.org> Signed-off-by: Jens Axboe <axboe@kernel.dk>
Diffstat (limited to 'net')
-rw-r--r--net/ipv4/inet_connection_sock.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/net/ipv4/inet_connection_sock.c b/net/ipv4/inet_connection_sock.c
index 7734d189c66b..d81f74ce0f02 100644
--- a/net/ipv4/inet_connection_sock.c
+++ b/net/ipv4/inet_connection_sock.c
@@ -692,6 +692,7 @@ struct sock *inet_csk_accept(struct sock *sk, struct proto_accept_arg *arg)
goto out_err;
}
req = reqsk_queue_remove(queue, sk);
+ arg->is_empty = reqsk_queue_empty(queue);
newsk = req->sk;
if (sk->sk_protocol == IPPROTO_TCP &&