mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-30 22:26:55 +00:00
SUNRPC: Refactor rpc_xdr_buf_init()
Clean up: there is some XDR initialization logic that is common to the forward channel and backchannel. Move it to an XDR header so it can be shared. rpc_rqst::rq_buffer points to a buffer containing big-endian data. Update its annotation as part of the clean up. Signed-off-by: Chuck Lever <chuck.lever@oracle.com> Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
This commit is contained in:
parent
eb342e9a38
commit
b9c5bc03be
5 changed files with 21 additions and 37 deletions
|
@ -67,6 +67,18 @@ struct xdr_buf {
|
||||||
len; /* Length of XDR encoded message */
|
len; /* Length of XDR encoded message */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static inline void
|
||||||
|
xdr_buf_init(struct xdr_buf *buf, void *start, size_t len)
|
||||||
|
{
|
||||||
|
buf->head[0].iov_base = start;
|
||||||
|
buf->head[0].iov_len = len;
|
||||||
|
buf->tail[0].iov_len = 0;
|
||||||
|
buf->page_len = 0;
|
||||||
|
buf->flags = 0;
|
||||||
|
buf->len = 0;
|
||||||
|
buf->buflen = len;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* pre-xdr'ed macros.
|
* pre-xdr'ed macros.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -83,7 +83,7 @@ struct rpc_rqst {
|
||||||
void (*rq_release_snd_buf)(struct rpc_rqst *); /* release rq_enc_pages */
|
void (*rq_release_snd_buf)(struct rpc_rqst *); /* release rq_enc_pages */
|
||||||
struct list_head rq_list;
|
struct list_head rq_list;
|
||||||
|
|
||||||
__u32 * rq_buffer; /* XDR encode buffer */
|
void *rq_buffer; /* Call XDR encode buffer */
|
||||||
size_t rq_callsize,
|
size_t rq_callsize,
|
||||||
rq_rcvsize;
|
rq_rcvsize;
|
||||||
size_t rq_xmit_bytes_sent; /* total bytes sent */
|
size_t rq_xmit_bytes_sent; /* total bytes sent */
|
||||||
|
|
|
@ -76,13 +76,7 @@ static int xprt_alloc_xdr_buf(struct xdr_buf *buf, gfp_t gfp_flags)
|
||||||
page = alloc_page(gfp_flags);
|
page = alloc_page(gfp_flags);
|
||||||
if (page == NULL)
|
if (page == NULL)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
buf->head[0].iov_base = page_address(page);
|
xdr_buf_init(buf, page_address(page), PAGE_SIZE);
|
||||||
buf->head[0].iov_len = PAGE_SIZE;
|
|
||||||
buf->tail[0].iov_base = NULL;
|
|
||||||
buf->tail[0].iov_len = 0;
|
|
||||||
buf->page_len = 0;
|
|
||||||
buf->len = 0;
|
|
||||||
buf->buflen = PAGE_SIZE;
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1746,18 +1746,6 @@ rpc_task_force_reencode(struct rpc_task *task)
|
||||||
task->tk_rqstp->rq_bytes_sent = 0;
|
task->tk_rqstp->rq_bytes_sent = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void
|
|
||||||
rpc_xdr_buf_init(struct xdr_buf *buf, void *start, size_t len)
|
|
||||||
{
|
|
||||||
buf->head[0].iov_base = start;
|
|
||||||
buf->head[0].iov_len = len;
|
|
||||||
buf->tail[0].iov_len = 0;
|
|
||||||
buf->page_len = 0;
|
|
||||||
buf->flags = 0;
|
|
||||||
buf->len = 0;
|
|
||||||
buf->buflen = len;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* 3. Encode arguments of an RPC call
|
* 3. Encode arguments of an RPC call
|
||||||
*/
|
*/
|
||||||
|
@ -1770,12 +1758,12 @@ rpc_xdr_encode(struct rpc_task *task)
|
||||||
|
|
||||||
dprint_status(task);
|
dprint_status(task);
|
||||||
|
|
||||||
rpc_xdr_buf_init(&req->rq_snd_buf,
|
xdr_buf_init(&req->rq_snd_buf,
|
||||||
req->rq_buffer,
|
req->rq_buffer,
|
||||||
req->rq_callsize);
|
req->rq_callsize);
|
||||||
rpc_xdr_buf_init(&req->rq_rcv_buf,
|
xdr_buf_init(&req->rq_rcv_buf,
|
||||||
(char *)req->rq_buffer + req->rq_callsize,
|
(char *)req->rq_buffer + req->rq_callsize,
|
||||||
req->rq_rcvsize);
|
req->rq_rcvsize);
|
||||||
|
|
||||||
p = rpc_encode_header(task);
|
p = rpc_encode_header(task);
|
||||||
if (p == NULL) {
|
if (p == NULL) {
|
||||||
|
|
|
@ -38,7 +38,6 @@ static int rpcrdma_bc_setup_rqst(struct rpcrdma_xprt *r_xprt,
|
||||||
struct rpcrdma_ia *ia = &r_xprt->rx_ia;
|
struct rpcrdma_ia *ia = &r_xprt->rx_ia;
|
||||||
struct rpcrdma_regbuf *rb;
|
struct rpcrdma_regbuf *rb;
|
||||||
struct rpcrdma_req *req;
|
struct rpcrdma_req *req;
|
||||||
struct xdr_buf *buf;
|
|
||||||
size_t size;
|
size_t size;
|
||||||
|
|
||||||
req = rpcrdma_create_req(r_xprt);
|
req = rpcrdma_create_req(r_xprt);
|
||||||
|
@ -60,16 +59,7 @@ static int rpcrdma_bc_setup_rqst(struct rpcrdma_xprt *r_xprt,
|
||||||
req->rl_sendbuf = rb;
|
req->rl_sendbuf = rb;
|
||||||
/* so that rpcr_to_rdmar works when receiving a request */
|
/* so that rpcr_to_rdmar works when receiving a request */
|
||||||
rqst->rq_buffer = (void *)req->rl_sendbuf->rg_base;
|
rqst->rq_buffer = (void *)req->rl_sendbuf->rg_base;
|
||||||
|
xdr_buf_init(&rqst->rq_snd_buf, rqst->rq_buffer, size);
|
||||||
buf = &rqst->rq_snd_buf;
|
|
||||||
buf->head[0].iov_base = rqst->rq_buffer;
|
|
||||||
buf->head[0].iov_len = 0;
|
|
||||||
buf->tail[0].iov_base = NULL;
|
|
||||||
buf->tail[0].iov_len = 0;
|
|
||||||
buf->page_len = 0;
|
|
||||||
buf->len = 0;
|
|
||||||
buf->buflen = size;
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
out_fail:
|
out_fail:
|
||||||
|
|
Loading…
Reference in a new issue