From: Greg Kroah-Hartman Date: Thu, 29 Oct 2020 11:34:15 +0000 (+0100) Subject: 4.9-stable patches X-Git-Tag: v4.19.154~29 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=f94bfaccb0eec3d7bda5484c03d98b19fb3c07e5;p=thirdparty%2Fkernel%2Fstable-queue.git 4.9-stable patches added patches: sunrpc-econnrefused-should-cause-a-rebind.patch --- diff --git a/queue-4.9/sunrpc-econnrefused-should-cause-a-rebind.patch b/queue-4.9/sunrpc-econnrefused-should-cause-a-rebind.patch new file mode 100644 index 00000000000..ee3c47c4ce0 --- /dev/null +++ b/queue-4.9/sunrpc-econnrefused-should-cause-a-rebind.patch @@ -0,0 +1,52 @@ +From fd01b2597941d9c17980222999b0721648b383b8 Mon Sep 17 00:00:00 2001 +From: NeilBrown +Date: Fri, 18 Aug 2017 17:12:51 +1000 +Subject: SUNRPC: ECONNREFUSED should cause a rebind. + +From: NeilBrown + +commit fd01b2597941d9c17980222999b0721648b383b8 upstream. + +If you + - mount and NFSv3 filesystem + - do some file locking which requires the server + to make a GRANT call back + - unmount + - mount again and do the same locking + +then the second attempt at locking suffers a 30 second delay. +Unmounting and remounting causes lockd to stop and restart, +which causes it to bind to a new port. +The server still thinks the old port is valid and gets ECONNREFUSED +when trying to contact it. +ECONNREFUSED should be seen as a hard error that is not worth +retrying. Rebinding is the only reasonable response. + +This patch forces a rebind if that makes sense. + +Signed-off-by: NeilBrown +Signed-off-by: Trond Myklebust +Cc: Calum Mackay +Signed-off-by: Greg Kroah-Hartman + +--- + net/sunrpc/clnt.c | 8 ++++++++ + 1 file changed, 8 insertions(+) + +--- a/net/sunrpc/clnt.c ++++ b/net/sunrpc/clnt.c +@@ -1936,6 +1936,14 @@ call_connect_status(struct rpc_task *tas + task->tk_status = 0; + switch (status) { + case -ECONNREFUSED: ++ /* A positive refusal suggests a rebind is needed. */ ++ if (RPC_IS_SOFTCONN(task)) ++ break; ++ if (clnt->cl_autobind) { ++ rpc_force_rebind(clnt); ++ task->tk_action = call_bind; ++ return; ++ } + case -ECONNRESET: + case -ECONNABORTED: + case -ENETUNREACH: