35 lines
1.2 KiB
Diff
35 lines
1.2 KiB
Diff
From: Benjamin Coddington <bcodding@redhat.com>
|
|
Date: Tue, 23 Sep 2014 12:26:20 -0400
|
|
Subject: [2/2] lockd: Try to reconnect if statd has moved
|
|
Origin: https://git.kernel.org/linus/173b3afceebe76fa2205b2c8808682d5b541fe3c
|
|
Bug-Debian: https://bugs.debian.org/767219
|
|
|
|
If rpc.statd is restarted, upcalls to monitor hosts can fail with
|
|
ECONNREFUSED. In that case force a lookup of statd's new port and retry the
|
|
upcall.
|
|
|
|
Signed-off-by: Benjamin Coddington <bcodding@redhat.com>
|
|
Cc: stable@vger.kernel.org
|
|
Signed-off-by: Trond Myklebust <trond.myklebust@primarydata.com>
|
|
---
|
|
fs/lockd/mon.c | 6 ++++++
|
|
1 file changed, 6 insertions(+)
|
|
|
|
diff --git a/fs/lockd/mon.c b/fs/lockd/mon.c
|
|
index daa8e75..9106f42 100644
|
|
--- a/fs/lockd/mon.c
|
|
+++ b/fs/lockd/mon.c
|
|
@@ -159,6 +159,12 @@ static int nsm_mon_unmon(struct nsm_handle *nsm, u32 proc, struct nsm_res *res,
|
|
|
|
msg.rpc_proc = &clnt->cl_procinfo[proc];
|
|
status = rpc_call_sync(clnt, &msg, RPC_TASK_SOFTCONN);
|
|
+ if (status == -ECONNREFUSED) {
|
|
+ dprintk("lockd: NSM upcall RPC failed, status=%d, forcing rebind\n",
|
|
+ status);
|
|
+ rpc_force_rebind(clnt);
|
|
+ status = rpc_call_sync(clnt, &msg, RPC_TASK_SOFTCONN);
|
|
+ }
|
|
if (status < 0)
|
|
dprintk("lockd: NSM upcall RPC failed, status=%d\n",
|
|
status);
|