diff options
author | 2005-10-13 16:54:48 -0400 | |
---|---|---|
committer | 2005-10-18 23:19:43 -0700 | |
commit | f3680312a737355ddf35c1b68af25e384d7ef0a8 (patch) | |
tree | 6b447f0a58bf1c1acfa8b1731ef06580d275b983 /net/sunrpc | |
parent | SUNRPC: Provide a callback to allow free pages allocated during xdr encoding (diff) | |
download | linux-f3680312a737355ddf35c1b68af25e384d7ef0a8.tar.gz linux-f3680312a737355ddf35c1b68af25e384d7ef0a8.tar.bz2 linux-f3680312a737355ddf35c1b68af25e384d7ef0a8.zip |
SUNRPC: Retry wrap in case of memory allocation failure.
For privacy we need to allocate extra pages to hold encrypted page data when
wrapping requests. This allocation may fail, and we handle that case by
waiting and retrying.
Signed-off-by: J. Bruce Fields <bfields@citi.umich.edu>
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
Diffstat (limited to 'net/sunrpc')
-rw-r--r-- | net/sunrpc/clnt.c | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/net/sunrpc/clnt.c b/net/sunrpc/clnt.c index 534274056329..702ede309b06 100644 --- a/net/sunrpc/clnt.c +++ b/net/sunrpc/clnt.c @@ -710,9 +710,16 @@ call_encode(struct rpc_task *task) rpc_exit(task, -EIO); return; } - if (encode != NULL) - task->tk_status = rpcauth_wrap_req(task, encode, req, p, - task->tk_msg.rpc_argp); + if (encode == NULL) + return; + + task->tk_status = rpcauth_wrap_req(task, encode, req, p, + task->tk_msg.rpc_argp); + if (task->tk_status == -ENOMEM) { + /* XXX: Is this sane? */ + rpc_delay(task, 3*HZ); + task->tk_status = -EAGAIN; + } } /* |