[Ocfs2-commits] mfasheh commits r771 - in trunk/src: . inc

svn-commits at oss.oracle.com svn-commits at oss.oracle.com
Thu Mar 11 18:11:15 CST 2004


Author: mfasheh
Date: 2004-03-11 18:11:14 -0600 (Thu, 11 Mar 2004)
New Revision: 771

Modified:
   trunk/src/inc/ocfs.h
   trunk/src/nm.c
   trunk/src/osb.c
Log:
* Add a process_vote semaphore to avoid a deadlock when we drop down to disk voting.
* fix a leak where we were leaving a buffer sem locked after exiting process_vote.


Modified: trunk/src/inc/ocfs.h
===================================================================
--- trunk/src/inc/ocfs.h	2004-03-11 21:24:18 UTC (rev 770)
+++ trunk/src/inc/ocfs.h	2004-03-12 00:11:14 UTC (rev 771)
@@ -2061,6 +2061,7 @@
 	ocfs_dlm_stats dsk_reqst_stats;	/* stats of diskdlm vote requests */
 	ocfs_dlm_stats dsk_reply_stats;	/* stats of diskdlm vote reponses */
 	char dev_str[20];		/* "major,minor" of the device */
+	struct semaphore vote_sem; /* protects calls to ocfs_process_vote */
 };
 
 typedef struct _ocfs_comm_info

Modified: trunk/src/nm.c
===================================================================
--- trunk/src/nm.c	2004-03-11 21:24:18 UTC (rev 770)
+++ trunk/src/nm.c	2004-03-12 00:11:14 UTC (rev 771)
@@ -752,6 +752,8 @@
 
 	LOG_ENTRY_ARGS ("(0x%08x, 0x%08x)\n", osb, ctxt);
 
+	down(&osb->vote_sem);
+
 	if (!publish && !dlm_msg) {
 		status = -EINVAL;
 		LOG_ERROR_STR("invalid vote reply context!");
@@ -814,7 +816,7 @@
 					    status, &master_alive, &oin);
 	
 #ifdef VERBOSE_PROCESS_VOTE
-	printk("ocfs_process_vote: %s request for lockid: %u.%u, action: %s, type: %s\n",
+	printk("(%u) ocfs_process_vote: %s request for lockid: %u.%u, action: %s, type: %s\n", ocfs_getpid(),
 	       flags & FLAG_RELEASE_LOCK ? "RELEASE" : 
 	       (flags & FLAG_ACQUIRE_LOCK ? "ACQUIRE" : "MODIFY"), lock_id,
 	       process_vote_strings[vote_type], disk_vote ? "disk vote" : "net vote" );
@@ -1117,6 +1119,9 @@
 					lockres->lock_type = lockres->lock_state = OCFS_DLM_NO_LOCK;
 				else // CHANGE_MASTER
 					lockres->master_node_num = node_num;
+			} else {
+				/* we didn't actually modify it. */
+				ocfs_clear_buffer_modified(fe_bh);
 			}
 			brelse(fe_bh);
 			vote_response = FLAG_VOTE_NODE;
@@ -1291,6 +1296,8 @@
 		iput(inode);
 	}
 
+	up(&osb->vote_sem);
+
 	LOG_EXIT_STATUS (status);
 	return status;
 }				/* ocfs_process_vote */

Modified: trunk/src/osb.c
===================================================================
--- trunk/src/osb.c	2004-03-11 21:24:18 UTC (rev 770)
+++ trunk/src/osb.c	2004-03-12 00:11:14 UTC (rev 771)
@@ -83,6 +83,7 @@
 	init_MUTEX (&(osb->trans_lock));
 	init_MUTEX (&(osb->extend_sem));
 	init_MUTEX (&(osb->cfg_lock));
+	init_MUTEX (&(osb->vote_sem));
 
 	spin_lock_init(&osb->recovery_map_lock);
 	osb->recovery_map = 0;



More information about the Ocfs2-commits mailing list