[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