SUNRPC: Retry wrap in case of memory allocation failure.
authorJ. Bruce Fields <bfields@fieldses.org>
Thu, 13 Oct 2005 20:54:48 +0000 (16:54 -0400)
committerTrond Myklebust <Trond.Myklebust@netapp.com>
Wed, 19 Oct 2005 06:19:43 +0000 (23:19 -0700)
 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>
net/sunrpc/clnt.c

index 53427405632926dcd2c5121a799285629ec00eca..702ede309b067260130321a32f8e8c1779b529bf 100644 (file)
@@ -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;
+       }
 }
 
 /*