Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1b092092 authored by Trond Myklebust's avatar Trond Myklebust
Browse files

SUNRPC: Pass a pointer to struct rpc_xprt to the connect callback



Avoid another RCU dereference by passing the pointer to struct rpc_xprt
from the caller.

Signed-off-by: default avatarTrond Myklebust <Trond.Myklebust@netapp.com>
parent a4f0835c
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -117,7 +117,7 @@ struct rpc_xprt_ops {
	void		(*alloc_slot)(struct rpc_xprt *xprt, struct rpc_task *task);
	void		(*rpcbind)(struct rpc_task *task);
	void		(*set_port)(struct rpc_xprt *xprt, unsigned short port);
	void		(*connect)(struct rpc_task *task);
	void		(*connect)(struct rpc_xprt *xprt, struct rpc_task *task);
	void *		(*buf_alloc)(struct rpc_task *task, size_t size);
	void		(*buf_free)(void *buffer);
	int		(*send_request)(struct rpc_task *task);
+1 −1
Original line number Diff line number Diff line
@@ -724,7 +724,7 @@ void xprt_connect(struct rpc_task *task)
		if (xprt_test_and_set_connecting(xprt))
			return;
		xprt->stat.connect_start = jiffies;
		xprt->ops->connect(task);
		xprt->ops->connect(xprt, task);
	}
}

+1 −2
Original line number Diff line number Diff line
@@ -426,9 +426,8 @@ xprt_rdma_set_port(struct rpc_xprt *xprt, u16 port)
}

static void
xprt_rdma_connect(struct rpc_task *task)
xprt_rdma_connect(struct rpc_xprt *xprt, struct rpc_task *task)
{
	struct rpc_xprt *xprt = (struct rpc_xprt *)task->tk_xprt;
	struct rpcrdma_xprt *r_xprt = rpcx_to_rdmax(xprt);

	if (r_xprt->rx_ep.rep_connected != 0) {
+2 −2
Original line number Diff line number Diff line
@@ -2205,6 +2205,7 @@ out:

/**
 * xs_connect - connect a socket to a remote endpoint
 * @xprt: pointer to transport structure
 * @task: address of RPC task that manages state of connect request
 *
 * TCP: If the remote end dropped the connection, delay reconnecting.
@@ -2216,9 +2217,8 @@ out:
 * If a UDP socket connect fails, the delay behavior here prevents
 * retry floods (hard mounts).
 */
static void xs_connect(struct rpc_task *task)
static void xs_connect(struct rpc_xprt *xprt, struct rpc_task *task)
{
	struct rpc_xprt *xprt = task->tk_xprt;
	struct sock_xprt *transport = container_of(xprt, struct sock_xprt, xprt);

	if (transport->sock != NULL && !RPC_IS_SOFTCONN(task)) {