SUNRPC: remove the maximum number of retries in call_bind_status
authorDai Ngo <dai.ngo@oracle.com>
Tue, 18 Apr 2023 20:19:02 +0000 (13:19 -0700)
committerAnna Schumaker <Anna.Schumaker@Netapp.com>
Wed, 19 Apr 2023 21:06:02 +0000 (17:06 -0400)
Currently call_bind_status places a hard limit of 3 to the number of
retries on EACCES error. This limit was done to prevent NLM unlock
requests from being hang forever when the server keeps returning garbage.
However this change causes problem for cases when NLM service takes
longer than 9 seconds to register with the port mapper after a restart.

This patch removes this hard coded limit and let the RPC handles
the retry based on the standard hard/soft task semantics.

Fixes: 0b760113a3a1 ("NLM: Don't hang forever on NLM unlock requests")
Reported-by: Helen Chao <helen.chao@oracle.com>
Tested-by: Helen Chao <helen.chao@oracle.com>
Signed-off-by: Dai Ngo <dai.ngo@oracle.com>
Reviewed-by: Jeff Layton <jlayton@kernel.org>
Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
include/linux/sunrpc/sched.h
net/sunrpc/clnt.c
net/sunrpc/sched.c

index b8ca3ecaf8d76b88b459b806bade1be8ef371f98..8ada7dc802d3050790cc4ed3e2c38dbf3bc8efe3 100644 (file)
@@ -90,8 +90,7 @@ struct rpc_task {
 #endif
        unsigned char           tk_priority : 2,/* Task priority */
                                tk_garb_retry : 2,
-                               tk_cred_retry : 2,
-                               tk_rebind_retry : 2;
+                               tk_cred_retry : 2;
 };
 
 typedef void                   (*rpc_action)(struct rpc_task *);
index fd7e1c630493e271dc61716f509e79dea3e76c3c..d2ee5663430830e8b867ac9ee118779d777a89e9 100644 (file)
@@ -2050,9 +2050,6 @@ call_bind_status(struct rpc_task *task)
                        status = -EOPNOTSUPP;
                        break;
                }
-               if (task->tk_rebind_retry == 0)
-                       break;
-               task->tk_rebind_retry--;
                rpc_delay(task, 3*HZ);
                goto retry_timeout;
        case -ENOBUFS:
index be587a308e05a5f84432dfcfa3c59e6dd0acba8b..c8321de341eea31430f3ae74cabe21ffe6564f19 100644 (file)
@@ -817,7 +817,6 @@ rpc_init_task_statistics(struct rpc_task *task)
        /* Initialize retry counters */
        task->tk_garb_retry = 2;
        task->tk_cred_retry = 2;
-       task->tk_rebind_retry = 2;
 
        /* starting timestamp */
        task->tk_start = ktime_get();