| From 173b3afceebe76fa2205b2c8808682d5b541fe3c Mon Sep 17 00:00:00 2001 |
| From: Benjamin Coddington <bcodding@redhat.com> |
| Date: Tue, 23 Sep 2014 12:26:20 -0400 |
| Subject: lockd: Try to reconnect if statd has moved |
| |
| From: Benjamin Coddington <bcodding@redhat.com> |
| |
| commit 173b3afceebe76fa2205b2c8808682d5b541fe3c upstream. |
| |
| 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> |
| Signed-off-by: Trond Myklebust <trond.myklebust@primarydata.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| fs/lockd/mon.c | 6 ++++++ |
| 1 file changed, 6 insertions(+) |
| |
| --- a/fs/lockd/mon.c |
| +++ b/fs/lockd/mon.c |
| @@ -159,6 +159,12 @@ static int nsm_mon_unmon(struct nsm_hand |
| |
| 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); |