Commit 5cc7fce3 authored by Al Viro's avatar Al Viro Committed by Jakub Kicinski
Browse files

don't open-code kernel_accept() in rds_tcp_accept_one()



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: default avatarAl Viro <viro@zeniv.linux.org.uk>
Link: https://patch.msgid.link/20250713180134.GC1880847@ZenIV


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent c34632db
Loading
Loading
Loading
Loading
+2 −22
Original line number Diff line number Diff line
@@ -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)) {