[Ocfs2-commits] mfasheh commits r1872 - trunk/fs/ocfs2/dlm

svn-commits at oss.oracle.com svn-commits at oss.oracle.com
Mon Jan 31 17:52:39 CST 2005


Author: mfasheh
Date: 2005-01-31 17:52:37 -0600 (Mon, 31 Jan 2005)
New Revision: 1872

Modified:
   trunk/fs/ocfs2/dlm/userdlm.c
Log:
* userdlm update:
 -handle a race between unlink / unblock gracefully
 -add a bunch of tracing to userdlm.c. This will aid in debugging.



Modified: trunk/fs/ocfs2/dlm/userdlm.c
===================================================================
--- trunk/fs/ocfs2/dlm/userdlm.c	2005-01-31 23:49:27 UTC (rev 1871)
+++ trunk/fs/ocfs2/dlm/userdlm.c	2005-01-31 23:52:37 UTC (rev 1872)
@@ -272,7 +272,14 @@
 	 * for user_ast to do. */
 	lockres->l_flags &= ~USER_LOCK_QUEUED;
 
+	if (lockres->l_flags & USER_LOCK_IN_TEARDOWN) {
+		dprintk("lock is in teardown so we do nothing\n");
+		spin_unlock(&lockres->l_lock);
+		goto drop_ref;
+	}
+
 	if (lockres->l_flags & USER_LOCK_BUSY) {
+		dprintk("BUSY flag detected...\n");
 		if (lockres->l_flags & USER_LOCK_IN_CANCEL) {
 			spin_unlock(&lockres->l_lock);
 			goto drop_ref;
@@ -304,11 +311,16 @@
 	if ((lockres->l_blocking == LKM_EXMODE)
 	    && (lockres->l_ex_holders || lockres->l_ro_holders)) {
 		spin_unlock(&lockres->l_lock);
+		dprintk("can't downconvert for ex: ro = %u, ex = %u\n",
+			lockres->l_ro_holders, lockres->l_ex_holders);
 		goto drop_ref;
 	}
-	if (lockres->l_blocking == LKM_PRMODE
+
+	if ((lockres->l_blocking == LKM_PRMODE)
 	    && lockres->l_ex_holders) {
 		spin_unlock(&lockres->l_lock);
+		dprintk("can't downconvert for pr: ex = %u\n",
+			lockres->l_ex_holders);
 		goto drop_ref;
 	}
 
@@ -316,6 +328,8 @@
 	new_level = user_highest_compat_lock_level(lockres->l_blocking);
 	lockres->l_requested = new_level;
 	lockres->l_flags |= USER_LOCK_BUSY;
+	dprintk("Downconvert lock from %d to %d\n",
+		lockres->l_level, new_level);
 	spin_unlock(&lockres->l_lock);
 
 	/* need lock downconvert request now... */
@@ -526,22 +540,26 @@
 	int status = -EBUSY;
 	dlm_ctxt *dlm = dlm_ctxt_from_user_lockres(lockres);
 
-	dprintk("destroying %s\n", lockres->l_name);
+	dprintk("asked to destroy %s\n", lockres->l_name);
 
 	spin_lock(&lockres->l_lock);
 
 	if (lockres->l_flags & USER_LOCK_BUSY) {
 		spin_unlock(&lockres->l_lock);
+		dprintk("lock %s is busy\n", lockres->l_name);
 		goto bail;
 	}
 
-	if (!(lockres->l_flags & USER_LOCK_ATTACHED)) {
+	if (lockres->l_ro_holders || lockres->l_ex_holders) {
 		spin_unlock(&lockres->l_lock);
+		dprintk("lock %s has holders\n", lockres->l_name);
 		goto bail;
 	}
 
-	if (lockres->l_ro_holders || lockres->l_ex_holders) {
+	status = 0;
+	if (!(lockres->l_flags & USER_LOCK_ATTACHED)) {
 		spin_unlock(&lockres->l_lock);
+		dprintk("lock %s is not attached\n", lockres->l_name);
 		goto bail;
 	}
 
@@ -550,6 +568,7 @@
 	lockres->l_flags |= USER_LOCK_IN_TEARDOWN;
 	spin_unlock(&lockres->l_lock);
 
+	dprintk("unlocking lockres %s\n", lockres->l_name);
 	status = dlmunlock(dlm,
 			   &lockres->l_lksb,
 			   0,



More information about the Ocfs2-commits mailing list