]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
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)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 17 May 2023 09:11:45 +0000 (11:11 +0200)
[ Upstream commit 691d0b782066a6eeeecbfceb7910a8f6184e6105 ]

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>
Signed-off-by: Sasha Levin <sashal@kernel.org>
include/linux/sunrpc/sched.h
net/sunrpc/clnt.c
net/sunrpc/sched.c

index c9548a63d09bbb6ce09097a0422ebd3b6091076d..0f7c8f820aa3f853d291d37ad33476d5f8744fa6 100644 (file)
@@ -88,8 +88,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 411925b043ccef63416502b5549bee2f7f27c052..de917d45e512a1c990657a37bcea3c254ae8f71f 100644 (file)
@@ -1827,9 +1827,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 -ETIMEDOUT:
index 4e0ebb4780df89d1df119b6153a53ad0237273c1..b368f5aabe2918d8f9bc1116d4c664a840a87c67 100644 (file)
@@ -697,7 +697,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();