提交 b9c5bc03 编写于 作者: C Chuck Lever 提交者: Anna Schumaker

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: NChuck Lever <chuck.lever@oracle.com>
Signed-off-by: NAnna Schumaker <Anna.Schumaker@Netapp.com>
上级 eb342e9a
...@@ -67,6 +67,18 @@ struct xdr_buf { ...@@ -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 { ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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, ...@@ -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, ...@@ -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:
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册