[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