summaryrefslogtreecommitdiffstats
path: root/net/sunrpc/clnt.c
diff options
context:
space:
mode:
authorJ. Bruce Fields <bfields@fieldses.org>2005-10-13 16:54:48 -0400
committerTrond Myklebust <Trond.Myklebust@netapp.com>2005-10-18 23:19:43 -0700
commitf3680312a737355ddf35c1b68af25e384d7ef0a8 (patch)
tree6b447f0a58bf1c1acfa8b1731ef06580d275b983 /net/sunrpc/clnt.c
parentead5e1c26fdcd969cf40c49cb0589d56879d240d (diff)
downloadop-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>
Diffstat (limited to 'net/sunrpc/clnt.c')
-rw-r--r--net/sunrpc/clnt.c13
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;
+ }
}
/*
OpenPOWER on IntegriCloud