From b9ef2f7fed24af01c4590c6f90dec93ef21b9f0b Mon Sep 17 00:00:00 2001 From: Avra Sengupta Date: Tue, 14 Jan 2014 23:59:30 +0000 Subject: glusterd/vol-locks: Releasing vol-locks on receiving peer disconnect On receiving peer disconnect, release volume locks held by the disconnected peer Change-Id: I0e36ba2fba4761225092ce2fb7b9b3c2d2dca0ad Signed-off-by: Avra Sengupta --- xlators/mgmt/glusterd/src/glusterd-handler.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/xlators/mgmt/glusterd/src/glusterd-handler.c b/xlators/mgmt/glusterd/src/glusterd-handler.c index 259b82a81..a95989cc9 100644 --- a/xlators/mgmt/glusterd/src/glusterd-handler.c +++ b/xlators/mgmt/glusterd/src/glusterd-handler.c @@ -4034,6 +4034,7 @@ __glusterd_peer_rpc_notify (struct rpc_clnt *rpc, void *mydata, glusterd_peerinfo_t *peerinfo = NULL; glusterd_peerctx_t *peerctx = NULL; gf_boolean_t quorum_action = _gf_false; + glusterd_volinfo_t *volinfo = NULL; peerctx = mydata; if (!peerctx) @@ -4061,6 +4062,19 @@ __glusterd_peer_rpc_notify (struct rpc_clnt *rpc, void *mydata, gf_log (this->name, GF_LOG_DEBUG, "got RPC_CLNT_DISCONNECT %d", peerinfo->state.state); + if (peerinfo->connected) { + list_for_each_entry (volinfo, &conf->volumes, vol_list) { + ret = glusterd_volume_unlock (volinfo->volname, + peerinfo->uuid); + if (ret) + gf_log (this->name, GF_LOG_TRACE, + "Lock not released for %s", + volinfo->volname); + } + + ret = 0; + } + if ((peerinfo->quorum_contrib != QUORUM_DOWN) && (peerinfo->state.state == GD_FRIEND_STATE_BEFRIENDED)) { peerinfo->quorum_contrib = QUORUM_DOWN; -- cgit