[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