瀏覽代碼

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>
J. Bruce Fields 19 年之前
父節點
當前提交
f3680312a7
共有 1 個文件被更改,包括 10 次插入3 次删除
  1. 10 3
      net/sunrpc/clnt.c

+ 10 - 3
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;
+	}
 }
 
 /*