SUNRPC: Clean up initialisation of the struct rpc_rqst
Move the initialisation back into xprt.c. Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
This commit is contained in:
Родитель
17b57b1883
Коммит
9dc6edcf67
|
@ -325,7 +325,6 @@ struct xprt_class {
|
||||||
struct rpc_xprt *xprt_create_transport(struct xprt_create *args);
|
struct rpc_xprt *xprt_create_transport(struct xprt_create *args);
|
||||||
void xprt_connect(struct rpc_task *task);
|
void xprt_connect(struct rpc_task *task);
|
||||||
void xprt_reserve(struct rpc_task *task);
|
void xprt_reserve(struct rpc_task *task);
|
||||||
void xprt_request_init(struct rpc_task *task);
|
|
||||||
void xprt_retry_reserve(struct rpc_task *task);
|
void xprt_retry_reserve(struct rpc_task *task);
|
||||||
int xprt_reserve_xprt(struct rpc_xprt *xprt, struct rpc_task *task);
|
int xprt_reserve_xprt(struct rpc_xprt *xprt, struct rpc_task *task);
|
||||||
int xprt_reserve_xprt_cong(struct rpc_xprt *xprt, struct rpc_task *task);
|
int xprt_reserve_xprt_cong(struct rpc_xprt *xprt, struct rpc_task *task);
|
||||||
|
|
|
@ -1558,7 +1558,6 @@ call_reserveresult(struct rpc_task *task)
|
||||||
task->tk_status = 0;
|
task->tk_status = 0;
|
||||||
if (status >= 0) {
|
if (status >= 0) {
|
||||||
if (task->tk_rqstp) {
|
if (task->tk_rqstp) {
|
||||||
xprt_request_init(task);
|
|
||||||
task->tk_action = call_refresh;
|
task->tk_action = call_refresh;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1250,6 +1250,55 @@ void xprt_free(struct rpc_xprt *xprt)
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(xprt_free);
|
EXPORT_SYMBOL_GPL(xprt_free);
|
||||||
|
|
||||||
|
static __be32
|
||||||
|
xprt_alloc_xid(struct rpc_xprt *xprt)
|
||||||
|
{
|
||||||
|
__be32 xid;
|
||||||
|
|
||||||
|
spin_lock(&xprt->reserve_lock);
|
||||||
|
xid = (__force __be32)xprt->xid++;
|
||||||
|
spin_unlock(&xprt->reserve_lock);
|
||||||
|
return xid;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
xprt_init_xid(struct rpc_xprt *xprt)
|
||||||
|
{
|
||||||
|
xprt->xid = prandom_u32();
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
xprt_request_init(struct rpc_task *task)
|
||||||
|
{
|
||||||
|
struct rpc_xprt *xprt = task->tk_xprt;
|
||||||
|
struct rpc_rqst *req = task->tk_rqstp;
|
||||||
|
|
||||||
|
INIT_LIST_HEAD(&req->rq_list);
|
||||||
|
req->rq_timeout = task->tk_client->cl_timeout->to_initval;
|
||||||
|
req->rq_task = task;
|
||||||
|
req->rq_xprt = xprt;
|
||||||
|
req->rq_buffer = NULL;
|
||||||
|
req->rq_xid = xprt_alloc_xid(xprt);
|
||||||
|
req->rq_connect_cookie = xprt->connect_cookie - 1;
|
||||||
|
req->rq_bytes_sent = 0;
|
||||||
|
req->rq_snd_buf.len = 0;
|
||||||
|
req->rq_snd_buf.buflen = 0;
|
||||||
|
req->rq_rcv_buf.len = 0;
|
||||||
|
req->rq_rcv_buf.buflen = 0;
|
||||||
|
req->rq_release_snd_buf = NULL;
|
||||||
|
xprt_reset_majortimeo(req);
|
||||||
|
dprintk("RPC: %5u reserved req %p xid %08x\n", task->tk_pid,
|
||||||
|
req, ntohl(req->rq_xid));
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
xprt_do_reserve(struct rpc_xprt *xprt, struct rpc_task *task)
|
||||||
|
{
|
||||||
|
xprt->ops->alloc_slot(xprt, task);
|
||||||
|
if (task->tk_rqstp != NULL)
|
||||||
|
xprt_request_init(task);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* xprt_reserve - allocate an RPC request slot
|
* xprt_reserve - allocate an RPC request slot
|
||||||
* @task: RPC task requesting a slot allocation
|
* @task: RPC task requesting a slot allocation
|
||||||
|
@ -1269,7 +1318,7 @@ void xprt_reserve(struct rpc_task *task)
|
||||||
task->tk_timeout = 0;
|
task->tk_timeout = 0;
|
||||||
task->tk_status = -EAGAIN;
|
task->tk_status = -EAGAIN;
|
||||||
if (!xprt_throttle_congested(xprt, task))
|
if (!xprt_throttle_congested(xprt, task))
|
||||||
xprt->ops->alloc_slot(xprt, task);
|
xprt_do_reserve(xprt, task);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1291,45 +1340,7 @@ void xprt_retry_reserve(struct rpc_task *task)
|
||||||
|
|
||||||
task->tk_timeout = 0;
|
task->tk_timeout = 0;
|
||||||
task->tk_status = -EAGAIN;
|
task->tk_status = -EAGAIN;
|
||||||
xprt->ops->alloc_slot(xprt, task);
|
xprt_do_reserve(xprt, task);
|
||||||
}
|
|
||||||
|
|
||||||
static inline __be32 xprt_alloc_xid(struct rpc_xprt *xprt)
|
|
||||||
{
|
|
||||||
__be32 xid;
|
|
||||||
|
|
||||||
spin_lock(&xprt->reserve_lock);
|
|
||||||
xid = (__force __be32)xprt->xid++;
|
|
||||||
spin_unlock(&xprt->reserve_lock);
|
|
||||||
return xid;
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline void xprt_init_xid(struct rpc_xprt *xprt)
|
|
||||||
{
|
|
||||||
xprt->xid = prandom_u32();
|
|
||||||
}
|
|
||||||
|
|
||||||
void xprt_request_init(struct rpc_task *task)
|
|
||||||
{
|
|
||||||
struct rpc_xprt *xprt = task->tk_xprt;
|
|
||||||
struct rpc_rqst *req = task->tk_rqstp;
|
|
||||||
|
|
||||||
INIT_LIST_HEAD(&req->rq_list);
|
|
||||||
req->rq_timeout = task->tk_client->cl_timeout->to_initval;
|
|
||||||
req->rq_task = task;
|
|
||||||
req->rq_xprt = xprt;
|
|
||||||
req->rq_buffer = NULL;
|
|
||||||
req->rq_xid = xprt_alloc_xid(xprt);
|
|
||||||
req->rq_connect_cookie = xprt->connect_cookie - 1;
|
|
||||||
req->rq_bytes_sent = 0;
|
|
||||||
req->rq_snd_buf.len = 0;
|
|
||||||
req->rq_snd_buf.buflen = 0;
|
|
||||||
req->rq_rcv_buf.len = 0;
|
|
||||||
req->rq_rcv_buf.buflen = 0;
|
|
||||||
req->rq_release_snd_buf = NULL;
|
|
||||||
xprt_reset_majortimeo(req);
|
|
||||||
dprintk("RPC: %5u reserved req %p xid %08x\n", task->tk_pid,
|
|
||||||
req, ntohl(req->rq_xid));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Загрузка…
Ссылка в новой задаче