소스 검색

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 20 년 전
부모
커밋
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;
+	}
 }
 
 /*