mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-11 21:38:32 +08:00
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: Trond Myklebust <Trond.Myklebust@netapp.com>
This commit is contained in:
parent
a4f0835c60
commit
1b092092bf
@ -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);
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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) {
|
||||
|
@ -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)) {
|
||||
|
Loading…
Reference in New Issue
Block a user