diff options
author | Trond Myklebust <trond.myklebust@hammerspace.com> | 2018-09-13 19:22:04 +0300 |
---|---|---|
committer | Trond Myklebust <trond.myklebust@hammerspace.com> | 2018-09-30 22:35:16 +0300 |
commit | 9d96acbc7f376dc1ffcedca0c349dd3389187a38 (patch) | |
tree | 7c3c3a899f9beee854ed00b547455b6a6e7d1b02 /net/sunrpc/xprt.c | |
parent | 431f6eb3570f286036bc8718a908a283f5d99473 (diff) | |
download | linux-9d96acbc7f376dc1ffcedca0c349dd3389187a38.tar.xz |
SUNRPC: Add a bvec array to struct xdr_buf for use with iovec_iter()
Add a bvec array to struct xdr_buf, and have the client allocate it
when we need to receive data into pages.
Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
Diffstat (limited to 'net/sunrpc/xprt.c')
-rw-r--r-- | net/sunrpc/xprt.c | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/net/sunrpc/xprt.c b/net/sunrpc/xprt.c index 7333874c6595..7ee9f1e996db 100644 --- a/net/sunrpc/xprt.c +++ b/net/sunrpc/xprt.c @@ -1264,6 +1264,22 @@ xprt_request_dequeue_transmit(struct rpc_task *task) } /** + * xprt_request_prepare - prepare an encoded request for transport + * @req: pointer to rpc_rqst + * + * Calls into the transport layer to do whatever is needed to prepare + * the request for transmission or receive. + */ +void +xprt_request_prepare(struct rpc_rqst *req) +{ + struct rpc_xprt *xprt = req->rq_xprt; + + if (xprt->ops->prepare_request) + xprt->ops->prepare_request(req); +} + +/** * xprt_request_need_retransmit - Test if a task needs retransmission * @task: pointer to rpc_task * @@ -1727,6 +1743,7 @@ void xprt_release(struct rpc_task *task) if (req->rq_buffer) xprt->ops->buf_free(task); xprt_inject_disconnect(xprt); + xdr_free_bvec(&req->rq_rcv_buf); if (req->rq_cred != NULL) put_rpccred(req->rq_cred); task->tk_rqstp = NULL; |