From c3b6df1a8e27c66a5c17cc1d6a92fdc37354ae6f Mon Sep 17 00:00:00 2001 From: Anand Avati Date: Tue, 12 Oct 2010 01:21:51 +0000 Subject: protocol/client: prevent propagation of CHILD_DOWN after pmap query pmap query results in a new port to which the rpc client reconnects. This involves disconnection of current connection to pmap which was propagating CHILD_DOWN upwards prematurely Signed-off-by: Anand V. Avati Signed-off-by: Vijay Bellur BUG: 1756 (NFS must revalidate inode on first ESTALE on lookup) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=1756 --- xlators/protocol/client/src/client-handshake.c | 1 + xlators/protocol/client/src/client.c | 5 ++++- xlators/protocol/client/src/client.h | 1 + 3 files changed, 6 insertions(+), 1 deletion(-) (limited to 'xlators') diff --git a/xlators/protocol/client/src/client-handshake.c b/xlators/protocol/client/src/client-handshake.c index fd9ee08208e..3dec4900605 100644 --- a/xlators/protocol/client/src/client-handshake.c +++ b/xlators/protocol/client/src/client-handshake.c @@ -782,6 +782,7 @@ out: STACK_DESTROY (frame->root); if (conf) { + conf->skip_notify = 1; rpc_transport_disconnect (conf->rpc->conn.trans); rpc_clnt_reconnect (conf->rpc->conn.trans); diff --git a/xlators/protocol/client/src/client.c b/xlators/protocol/client/src/client.c index e2513f89145..53c356cdec6 100644 --- a/xlators/protocol/client/src/client.c +++ b/xlators/protocol/client/src/client.c @@ -1585,7 +1585,10 @@ client_rpc_notify (struct rpc_clnt *rpc, void *mydata, rpc_clnt_event_t event, gf_log (this->name, GF_LOG_TRACE, "got RPC_CLNT_DISCONNECT"); - default_notify (this, GF_EVENT_CHILD_DOWN, NULL); + if (!conf->skip_notify) + default_notify (this, GF_EVENT_CHILD_DOWN, NULL); + conf->skip_notify = 0; + break; default: diff --git a/xlators/protocol/client/src/client.h b/xlators/protocol/client/src/client.h index 496e709ba31..39dfc36ea89 100644 --- a/xlators/protocol/client/src/client.h +++ b/xlators/protocol/client/src/client.h @@ -58,6 +58,7 @@ typedef struct clnt_conf { uint64_t reopen_fd_count; /* Count of fds reopened after a connection is established */ gf_lock_t rec_lock; + int skip_notify; } clnt_conf_t; typedef struct _client_fd_ctx { -- cgit