diff --git a/include/corosync/votequorum.h b/include/corosync/votequorum.h index 31b60c56..f9156866 100644 --- a/include/corosync/votequorum.h +++ b/include/corosync/votequorum.h @@ -48,6 +48,9 @@ typedef uint64_t votequorum_handle_t; #define VOTEQUORUM_INFO_FLAG_TWONODE 4 #define VOTEQUORUM_INFO_FLAG_QUORATE 8 +#define VOTEQUORUM_NODEID_US 0 +#define VOTEQUORUM_NODEID_QDEVICE -1 + #define NODESTATE_JOINING 1 #define NODESTATE_MEMBER 2 #define NODESTATE_DEAD 3 diff --git a/services/votequorum.c b/services/votequorum.c index 4c9d3c27..a4f79e5e 100644 --- a/services/votequorum.c +++ b/services/votequorum.c @@ -92,6 +92,8 @@ enum quorum_message_req_types { #define NODE_FLAGS_REMOVED 64 #define NODE_FLAGS_US 128 +#define NODEID_US 0 +#define NODEID_QDEVICE -1 typedef enum { NODESTATE_JOINING=1, NODESTATE_MEMBER, NODESTATE_DEAD, NODESTATE_LEAVING, NODESTATE_DISALLOWED } nodestate_t; @@ -805,6 +807,12 @@ static struct cluster_node *find_node_by_nodeid(int nodeid) struct cluster_node *node; struct list_head *tmp; + if (nodeid == NODEID_US) + return us; + + if (nodeid == NODEID_QDEVICE) + return quorum_device; + list_iterate(tmp, &cluster_members_list) { node = list_entry(tmp, struct cluster_node, list); if (node->node_id == nodeid) @@ -1126,13 +1134,7 @@ static void message_handler_req_lib_votequorum_getinfo (void *conn, const void * log_printf(LOGSYS_LEVEL_DEBUG, "got getinfo request on %p for node %d\n", conn, req_lib_votequorum_getinfo->nodeid); - if (req_lib_votequorum_getinfo->nodeid) { - node = find_node_by_nodeid(req_lib_votequorum_getinfo->nodeid); - } - else { - node = us; - } - + node = find_node_by_nodeid(req_lib_votequorum_getinfo->nodeid); if (node) { struct cluster_node *iternode; struct list_head *nodelist;