diff options
author | J. Bruce Fields <bfields@fieldses.org> | 2005-10-13 16:54:43 -0400 |
---|---|---|
committer | Trond Myklebust <Trond.Myklebust@netapp.com> | 2005-10-19 02:19:43 -0400 |
commit | ead5e1c26fdcd969cf40c49cb0589d56879d240d (patch) | |
tree | af0e04aed32eac60b35c987b933dbc132f0e780b /net | |
parent | 293f1eb551a77fe5c8956a559a3c0baea95cd9bc (diff) |
SUNRPC: Provide a callback to allow free pages allocated during xdr encoding
For privacy, we need to allocate pages to store the encrypted data (passed
in pages can't be used without the risk of corrupting data in the page cache).
So we need a way to free that memory after the request has been transmitted.
Signed-off-by: J. Bruce Fields <bfields@citi.umich.edu>
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
Diffstat (limited to 'net')
-rw-r--r-- | net/sunrpc/xprt.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/net/sunrpc/xprt.c b/net/sunrpc/xprt.c index 1ba55dc38b7a..6dda3860351f 100644 --- a/net/sunrpc/xprt.c +++ b/net/sunrpc/xprt.c | |||
@@ -839,6 +839,7 @@ static void xprt_request_init(struct rpc_task *task, struct rpc_xprt *xprt) | |||
839 | req->rq_task = task; | 839 | req->rq_task = task; |
840 | req->rq_xprt = xprt; | 840 | req->rq_xprt = xprt; |
841 | req->rq_xid = xprt_alloc_xid(xprt); | 841 | req->rq_xid = xprt_alloc_xid(xprt); |
842 | req->rq_release_snd_buf = NULL; | ||
842 | dprintk("RPC: %4d reserved req %p xid %08x\n", task->tk_pid, | 843 | dprintk("RPC: %4d reserved req %p xid %08x\n", task->tk_pid, |
843 | req, ntohl(req->rq_xid)); | 844 | req, ntohl(req->rq_xid)); |
844 | } | 845 | } |
@@ -867,6 +868,8 @@ void xprt_release(struct rpc_task *task) | |||
867 | xprt->last_used + xprt->idle_timeout); | 868 | xprt->last_used + xprt->idle_timeout); |
868 | spin_unlock_bh(&xprt->transport_lock); | 869 | spin_unlock_bh(&xprt->transport_lock); |
869 | task->tk_rqstp = NULL; | 870 | task->tk_rqstp = NULL; |
871 | if (req->rq_release_snd_buf) | ||
872 | req->rq_release_snd_buf(req); | ||
870 | memset(req, 0, sizeof(*req)); /* mark unused */ | 873 | memset(req, 0, sizeof(*req)); /* mark unused */ |
871 | 874 | ||
872 | dprintk("RPC: %4d release request %p\n", task->tk_pid, req); | 875 | dprintk("RPC: %4d release request %p\n", task->tk_pid, req); |