]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
don't open-code kernel_accept() in rds_tcp_accept_one()
authorAl Viro <viro@zeniv.linux.org.uk>
Sun, 13 Jul 2025 18:01:34 +0000 (19:01 +0100)
committerJakub Kicinski <kuba@kernel.org>
Tue, 15 Jul 2025 23:19:54 +0000 (16:19 -0700)
rds_tcp_accept_one() starts with a pretty much verbatim
copy of kernel_accept().  Might as well use the real thing...

That code went into mainline in 2009, kernel_accept()
had been added in Aug 2006, the copyright on rds/tcp_listen.c
is "Copyright (c) 2006 Oracle", so it's entirely possible
that it predates the introduction of kernel_accept().

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Link: https://patch.msgid.link/20250713180134.GC1880847@ZenIV
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
net/rds/tcp_listen.c

index b5c801c629a49569b6a2e32079d191e5aeada430..91e34af3fe5d56c3f3e4a4087ea13c25d1595cf8 100644 (file)
@@ -105,10 +105,6 @@ int rds_tcp_accept_one(struct socket *sock)
        int conn_state;
        struct rds_conn_path *cp;
        struct in6_addr *my_addr, *peer_addr;
-       struct proto_accept_arg arg = {
-               .flags = O_NONBLOCK,
-               .kern = true,
-       };
 #if !IS_ENABLED(CONFIG_IPV6)
        struct in6_addr saddr, daddr;
 #endif
@@ -117,25 +113,9 @@ int rds_tcp_accept_one(struct socket *sock)
        if (!sock) /* module unload or netns delete in progress */
                return -ENETUNREACH;
 
-       ret = sock_create_lite(sock->sk->sk_family,
-                              sock->sk->sk_type, sock->sk->sk_protocol,
-                              &new_sock);
+       ret = kernel_accept(sock, &new_sock, O_NONBLOCK);
        if (ret)
-               goto out;
-
-       ret = sock->ops->accept(sock, new_sock, &arg);
-       if (ret < 0)
-               goto out;
-
-       /* sock_create_lite() does not get a hold on the owner module so we
-        * need to do it here.  Note that sock_release() uses sock->ops to
-        * determine if it needs to decrement the reference count.  So set
-        * sock->ops after calling accept() in case that fails.  And there's
-        * no need to do try_module_get() as the listener should have a hold
-        * already.
-        */
-       new_sock->ops = sock->ops;
-       __module_get(new_sock->ops->owner);
+               return ret;
 
        rds_tcp_keepalive(new_sock);
        if (!rds_tcp_tune(new_sock)) {