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

svn-commits at oss.oracle.com svn-commits at oss.oracle.com
Fri Jan 28 17:00:57 CST 2005


Author: mfasheh
Date: 2005-01-28 17:00:55 -0600 (Fri, 28 Jan 2005)
New Revision: 1863

Modified:
   trunk/fs/ocfs2/dlm/userdlm.c
Log:
* the logic in user_cluster_unlock could at times result the process
  forgetting to drop a spinlock. Fix this.

* couple of printk fixes



Modified: trunk/fs/ocfs2/dlm/userdlm.c
===================================================================
--- trunk/fs/ocfs2/dlm/userdlm.c	2005-01-28 22:58:34 UTC (rev 1862)
+++ trunk/fs/ocfs2/dlm/userdlm.c	2005-01-28 23:00:55 UTC (rev 1863)
@@ -129,8 +129,8 @@
 
 	lksb = &(lockres->l_lksb);
 	if (lksb->status != DLM_NORMAL) {
-		printk("user_ast: lksb status value of %u "
-		       "on lockres %s\n", lksb->status, lockres->l_name);
+		err_printk("lksb status value of %u "
+			   "on lockres %s\n", lksb->status, lockres->l_name);
 		spin_unlock(&lockres->l_lock);
 		return;
 	}
@@ -377,8 +377,10 @@
 		goto bail;
 	}
 
-	dprintk("lockres %s: asking for %s lock\n", lockres->l_name,
-		(level == LKM_EXMODE) ? "LKM_EXMODE" : "LKM_PRMODE");
+	dprintk("lockres %s: asking for %s lock, passed flags = 0x%x\n",
+		lockres->l_name,
+		(level == LKM_EXMODE) ? "LKM_EXMODE" : "LKM_PRMODE",
+		lkm_flags);
 
 again:
 	if (signal_pending(current)) {
@@ -533,31 +535,34 @@
 		goto bail;
 	}
 
-	if (lockres->l_flags & USER_LOCK_ATTACHED) {
-		if (lockres->l_ro_holders || lockres->l_ex_holders) {
-			spin_unlock(&lockres->l_lock);
-			goto bail;
-		}
+	if (!(lockres->l_flags & USER_LOCK_ATTACHED)) {
+		spin_unlock(&lockres->l_lock);
+		goto bail;
+	}
 
-		lockres->l_flags &= ~USER_LOCK_ATTACHED;
-		lockres->l_flags |= USER_LOCK_BUSY;
-		lockres->l_flags |= USER_LOCK_IN_TEARDOWN;
+	if (lockres->l_ro_holders || lockres->l_ex_holders) {
 		spin_unlock(&lockres->l_lock);
+		goto bail;
+	}
 
-		status = dlmunlock(dlm,
-				   &lockres->l_lksb,
-				   0,
-				   user_unlock_ast,
-				   lockres);
-		if (status != DLM_NORMAL) {
-			err_printk("dlm returns %d!\n", status);
-			status = -EINVAL;
-			goto bail;
-		}
+	lockres->l_flags &= ~USER_LOCK_ATTACHED;
+	lockres->l_flags |= USER_LOCK_BUSY;
+	lockres->l_flags |= USER_LOCK_IN_TEARDOWN;
+	spin_unlock(&lockres->l_lock);
 
-		user_wait_on_busy_lock(lockres);
+	status = dlmunlock(dlm,
+			   &lockres->l_lksb,
+			   0,
+			   user_unlock_ast,
+			   lockres);
+	if (status != DLM_NORMAL) {
+		err_printk("dlm returns %d!\n", status);
+		status = -EINVAL;
+		goto bail;
 	}
 
+	user_wait_on_busy_lock(lockres);
+
 	status = 0;
 bail:
 	return status;



More information about the Ocfs2-commits mailing list