diff options
author | J. Bruce Fields <bfields@fieldses.org> | 2005-10-13 16:54:48 -0400 |
---|---|---|
committer | Trond Myklebust <Trond.Myklebust@netapp.com> | 2005-10-18 23:19:43 -0700 |
commit | f3680312a737355ddf35c1b68af25e384d7ef0a8 (patch) | |
tree | 6b447f0a58bf1c1acfa8b1731ef06580d275b983 | |
parent | ead5e1c26fdcd969cf40c49cb0589d56879d240d (diff) | |
download | op-kernel-dev-f3680312a737355ddf35c1b68af25e384d7ef0a8.zip op-kernel-dev-f3680312a737355ddf35c1b68af25e384d7ef0a8.tar.gz |
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>
-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 5342740..702ede3 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; + } } /* |