summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--xlators/mgmt/glusterd/src/glusterd-utils.c11
-rw-r--r--xlators/mgmt/glusterd/src/glusterd-utils.h3
2 files changed, 8 insertions, 6 deletions
diff --git a/xlators/mgmt/glusterd/src/glusterd-utils.c b/xlators/mgmt/glusterd/src/glusterd-utils.c
index 02d2cfb0932..03cebdc518a 100644
--- a/xlators/mgmt/glusterd/src/glusterd-utils.c
+++ b/xlators/mgmt/glusterd/src/glusterd-utils.c
@@ -2920,25 +2920,24 @@ glusterd_get_quorum_cluster_counts (xlator_t *this, int *active_count,
if (active_count)
*active_count = 1;
+ rcu_read_lock ();
if (!peer_list) {
- rcu_read_lock ();
cds_list_for_each_entry_rcu (peerinfo, &conf->peers,
uuid_list) {
- glusterd_quorum_count(peerinfo, inquorum_count,
+ GLUSTERD_QUORUM_COUNT(peerinfo, inquorum_count,
active_count, out);
}
- rcu_read_unlock ();
} else {
if (_local_xaction_peers) {
list_for_each_local_xaction_peers (peerinfo,
peer_list) {
- glusterd_quorum_count(peerinfo, inquorum_count,
+ GLUSTERD_QUORUM_COUNT(peerinfo, inquorum_count,
active_count, out);
}
} else {
cds_list_for_each_entry (peerinfo, peer_list,
op_peers_list) {
- glusterd_quorum_count(peerinfo, inquorum_count,
+ GLUSTERD_QUORUM_COUNT(peerinfo, inquorum_count,
active_count, out);
}
}
@@ -2959,6 +2958,8 @@ glusterd_get_quorum_cluster_counts (xlator_t *this, int *active_count,
*quorum_count = count;
ret = 0;
out:
+ rcu_read_unlock ();
+
return ret;
}
diff --git a/xlators/mgmt/glusterd/src/glusterd-utils.h b/xlators/mgmt/glusterd/src/glusterd-utils.h
index 1956029192a..f923bfad757 100644
--- a/xlators/mgmt/glusterd/src/glusterd-utils.h
+++ b/xlators/mgmt/glusterd/src/glusterd-utils.h
@@ -37,13 +37,14 @@
volinfo->volname, brickid);\
} while (0)
-#define glusterd_quorum_count(peerinfo, inquorum_count, active_count, _exit)\
+#define GLUSTERD_QUORUM_COUNT(peerinfo, inquorum_count, active_count, _exit) do {\
if (peerinfo->quorum_contrib == QUORUM_WAITING)\
goto _exit;\
if (_is_contributing_to_quorum (peerinfo->quorum_contrib))\
inquorum_count = inquorum_count + 1;\
if (active_count && (peerinfo->quorum_contrib == QUORUM_UP))\
*active_count = *active_count + 1;\
+} while (0)
struct glusterd_lock_ {
uuid_t owner;