[Ocfs2-commits] khackel commits r2666 -
branches/ocfs2-1.2/fs/ocfs2/dlm
svn-commits at oss.oracle.com
svn-commits at oss.oracle.com
Mon Oct 31 13:05:41 CST 2005
Author: khackel
Signed-off-by: jlbec
Signed-off-by: smushran
Date: 2005-10-31 13:05:40 -0600 (Mon, 31 Oct 2005)
New Revision: 2666
Modified:
branches/ocfs2-1.2/fs/ocfs2/dlm/dlmmaster.c
Log:
- Merge rev 2665 from trunk
- fixes bug 596
Signed-off-by: jlbec
Signed-off-by: smushran
Modified: branches/ocfs2-1.2/fs/ocfs2/dlm/dlmmaster.c
===================================================================
--- branches/ocfs2-1.2/fs/ocfs2/dlm/dlmmaster.c 2005-10-31 19:02:53 UTC (rev 2665)
+++ branches/ocfs2-1.2/fs/ocfs2/dlm/dlmmaster.c 2005-10-31 19:05:40 UTC (rev 2666)
@@ -1504,7 +1504,7 @@
struct dlm_ctxt *dlm = data;
struct dlm_master_list_entry *mle = NULL;
struct dlm_assert_master *assert = (struct dlm_assert_master *)msg->buf;
- struct dlm_lock_resource *res;
+ struct dlm_lock_resource *res = NULL;
char *name;
unsigned int namelen;
u32 flags;
@@ -1529,25 +1529,32 @@
/* find the MLE */
spin_lock(&dlm->master_lock);
if (!dlm_find_mle(dlm, &mle, name, namelen)) {
+ /* not an error, could be master just re-asserting */
mlog(0, "just got an assert_master from %u, but no "
"MLE for it! (%.*s)\n", assert->node_idx,
namelen, name);
} else {
int bit = find_next_bit (mle->maybe_map, O2NM_MAX_NODES, 0);
if (bit >= O2NM_MAX_NODES) {
+ /* not necessarily an error, though less likely.
+ * could be master just re-asserting. */
mlog(ML_ERROR, "no bits set in the maybe_map, but %u "
"is asserting! (%.*s)\n", assert->node_idx,
namelen, name);
- BUG();
} else if (bit != assert->node_idx) {
if (flags & DLM_ASSERT_MASTER_MLE_CLEANUP) {
mlog(0, "master %u was found, %u should "
"back off\n", assert->node_idx, bit);
} else {
- mlog(ML_ERROR, "expected %u to be the master, "
- "but %u is asserting! (%.*s)\n", bit,
- assert->node_idx, namelen, name);
- BUG();
+ /* with the fix for bug 569, a higher node
+ * number winning the mastery will respond
+ * YES to mastery requests, but this node
+ * had no way of knowing. let it pass. */
+ mlog(ML_ERROR, "%u is the lowest node, "
+ "%u is asserting. (%.*s) %u must "
+ "have begun after %u won.\n", bit,
+ assert->node_idx, namelen, name, bit,
+ assert->node_idx);
}
}
}
@@ -1558,7 +1565,11 @@
res = __dlm_lookup_lockres(dlm, name, namelen);
if (res) {
spin_lock(&res->spinlock);
- BUG_ON(res->state & DLM_LOCK_RES_RECOVERING);
+ if (res->state & DLM_LOCK_RES_RECOVERING) {
+ mlog(ML_ERROR, "%u asserting but %.*s is "
+ "RECOVERING!\n", assert->node_idx, namelen, name);
+ goto kill;
+ }
if (!mle) {
if (res->owner != assert->node_idx) {
mlog(ML_ERROR, "assert_master from "
@@ -1645,6 +1656,8 @@
}
done:
+ if (res)
+ dlm_lockres_put(res);
dlm_put(dlm);
return 0;
@@ -1652,6 +1665,7 @@
/* kill the caller! */
spin_unlock(&res->spinlock);
spin_unlock(&dlm->spinlock);
+ dlm_lockres_put(res);
mlog(ML_ERROR, "Bad message received from another node. Dumping state "
"and killing the other node now! This node is OK and can continue.\n");
dlm_dump_lock_resources(dlm);
More information about the Ocfs2-commits
mailing list