[Ocfs2-commits] khackel commits r2667 - branches/ocfs2-1.0/fs/ocfs2/dlm

svn-commits at oss.oracle.com svn-commits at oss.oracle.com
Mon Oct 31 13:10:22 CST 2005


Author: khackel
Signed-off-by: jlbec
Signed-off-by: smushran
Date: 2005-10-31 13:10:21 -0600 (Mon, 31 Oct 2005)
New Revision: 2667

Modified:
   branches/ocfs2-1.0/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.0/fs/ocfs2/dlm/dlmmaster.c
===================================================================
--- branches/ocfs2-1.0/fs/ocfs2/dlm/dlmmaster.c	2005-10-31 19:05:40 UTC (rev 2666)
+++ branches/ocfs2-1.0/fs/ocfs2/dlm/dlmmaster.c	2005-10-31 19:10:21 UTC (rev 2667)
@@ -1435,7 +1435,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;
@@ -1461,25 +1461,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);
 			}
 		}
 	}
@@ -1490,7 +1497,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 "
@@ -1577,6 +1588,8 @@
 	}
 
 done:
+	if (res)
+		dlm_lockres_put(res);
 	dlm_put(dlm);
 	return 0;
 
@@ -1584,6 +1597,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