SUNRPC: task should be exit if encode return EKEYEXPIRED more times
authorZhangXiaoxu <zhangxiaoxu5@huawei.com>
Mon, 29 Apr 2019 09:32:31 +0000 (17:32 +0800)
committerAnna Schumaker <Anna.Schumaker@Netapp.com>
Thu, 9 May 2019 20:26:56 +0000 (16:26 -0400)
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 <zhangxiaoxu5@huawei.com>
Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
net/sunrpc/clnt.c

index 369a2648dafc2a26297fbbff8ce091f42e1e158d..c1f1afabd024230739bb1ec38747e433814cb39c 100644 (file)
@@ -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);