[Ocfs2-commits] khackel commits r1253 - trunk/src
svn-commits at oss.oracle.com
svn-commits at oss.oracle.com
Tue Jul 13 17:36:31 CDT 2004
Author: khackel
Date: 2004-07-13 16:36:29 -0500 (Tue, 13 Jul 2004)
New Revision: 1253
Modified:
trunk/src/dlm.c
Log:
fix net dlm hang that could occur when a node in the vote map dies while mid-voting. removes this node from the map.
Modified: trunk/src/dlm.c
===================================================================
--- trunk/src/dlm.c 2004-07-13 21:14:55 UTC (rev 1252)
+++ trunk/src/dlm.c 2004-07-13 21:36:29 UTC (rev 1253)
@@ -1110,6 +1110,11 @@
while (status == -EAGAIN) {
// remove dead nodes
ocfs_node_map_and(&votemap, &osb->publ_map);
+ if (ocfs_node_map_is_empty(&votemap)) {
+ // last node in map died, so this node gets the lock
+ status = 0;
+ goto finally;
+ }
if (!disk_vote) {
LOG_TRACE_STR ("Network vote");
status = ocfs_send_dlm_request_msg (osb, lock_id, lock_type, flags,
@@ -1343,6 +1348,12 @@
lock_type = lockres->lock_type;
}
ocfs_node_map_clear_bit(&vote_map, osb->node_num);
+
+ /* net voting */
+try_net_again:
+ // remove dead nodes
+ ocfs_node_map_and(&vote_map, &osb->publ_map);
+
if (ocfs_node_map_is_empty(&vote_map)) {
/* As this is the only node alive, make it master of the lock */
/* no need to update open map */
@@ -1350,12 +1361,6 @@
goto vote_success;
}
-
-
- /* net voting */
-try_net_again:
- // remove dead nodes
- ocfs_node_map_and(&vote_map, &osb->publ_map);
if (!*disk_vote) {
LOG_TRACE_STR ("Network vote");
status = ocfs_send_dlm_request_msg (osb, lock_id, lock_type, flags,
More information about the Ocfs2-commits
mailing list