From 9c5948c248696ca60c56ec5a608e225c4ab8a854 Mon Sep 17 00:00:00 2001 From: ZhangXiaoxu Date: Mon, 29 Apr 2019 17:32:31 +0800 Subject: SUNRPC: task should be exit if encode return EKEYEXPIRED more times If the rpc.gssd always return cred success, but now the cred is expired, then the task will loop in call_refresh and call_transmit. Exit the rpc task after retry. Signed-off-by: ZhangXiaoxu Signed-off-by: Anna Schumaker --- net/sunrpc/clnt.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'net/sunrpc/clnt.c') diff --git a/net/sunrpc/clnt.c b/net/sunrpc/clnt.c index 369a2648dafc..c1f1afabd024 100644 --- a/net/sunrpc/clnt.c +++ b/net/sunrpc/clnt.c @@ -1814,7 +1814,14 @@ call_encode(struct rpc_task *task) rpc_delay(task, HZ >> 4); break; case -EKEYEXPIRED: - task->tk_action = call_refresh; + if (!task->tk_cred_retry) { + rpc_exit(task, task->tk_status); + } else { + task->tk_action = call_refresh; + task->tk_cred_retry--; + dprintk("RPC: %5u %s: retry refresh creds\n", + task->tk_pid, __func__); + } break; default: rpc_call_rpcerror(task, task->tk_status); -- cgit v1.2.3-59-g8ed1b