diff options
author | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-11-09 15:11:58 -0800 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-11-09 15:11:58 -0800 |
commit | e36aeee65d4db050bd8713537416a0a0632db079 (patch) | |
tree | 4d6ec6397598bb93e877ef84cdd6537a62736484 /fs/ocfs2/dlmglue.c | |
parent | b2f051ae390432789f2b02fe451aa23ae2698e3d (diff) | |
parent | e325a88f17196f18888f6e1426eb9fe3b4346d28 (diff) | |
download | kernel-crypto-e36aeee65d4db050bd8713537416a0a0632db079.tar.gz kernel-crypto-e36aeee65d4db050bd8713537416a0a0632db079.tar.xz kernel-crypto-e36aeee65d4db050bd8713537416a0a0632db079.zip |
Merge branch 'upstream-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mfasheh/ocfs2
* 'upstream-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mfasheh/ocfs2:
ocfs2: fix rename vs unlink race
[PATCH] Fix possibly too long write in o2hb_setup_one_bio()
ocfs2: fix write() performance regression
ocfs2: Commit journal on sync writes
ocfs2: Re-order iput in ocfs2_drop_dentry_lock
ocfs2: Create locks at initially requested level
[PATCH] Fix priority mistakes in fs/ocfs2/{alloc.c, dlmglue.c}
[2.6 patch] make ocfs2_find_entry_el() static
Diffstat (limited to 'fs/ocfs2/dlmglue.c')
-rw-r--r-- | fs/ocfs2/dlmglue.c | 25 |
1 files changed, 10 insertions, 15 deletions
diff --git a/fs/ocfs2/dlmglue.c b/fs/ocfs2/dlmglue.c index 41c76ff2fcf..4e97dcceaf8 100644 --- a/fs/ocfs2/dlmglue.c +++ b/fs/ocfs2/dlmglue.c @@ -670,7 +670,7 @@ static inline void ocfs2_generic_handle_attach_action(struct ocfs2_lock_res *loc { mlog_entry_void(); - BUG_ON((!lockres->l_flags & OCFS2_LOCK_BUSY)); + BUG_ON((!(lockres->l_flags & OCFS2_LOCK_BUSY))); BUG_ON(lockres->l_flags & OCFS2_LOCK_ATTACHED); if (lockres->l_requested > LKM_NLMODE && @@ -980,18 +980,6 @@ again: goto unlock; } - if (!(lockres->l_flags & OCFS2_LOCK_ATTACHED)) { - /* lock has not been created yet. */ - spin_unlock_irqrestore(&lockres->l_lock, flags); - - ret = ocfs2_lock_create(osb, lockres, LKM_NLMODE, 0); - if (ret < 0) { - mlog_errno(ret); - goto out; - } - goto again; - } - if (lockres->l_flags & OCFS2_LOCK_BLOCKED && !ocfs2_may_continue_on_blocked_lock(lockres, level)) { /* is the lock is currently blocked on behalf of @@ -1006,7 +994,14 @@ again: mlog(ML_ERROR, "lockres %s has action %u pending\n", lockres->l_name, lockres->l_action); - lockres->l_action = OCFS2_AST_CONVERT; + if (!(lockres->l_flags & OCFS2_LOCK_ATTACHED)) { + lockres->l_action = OCFS2_AST_ATTACH; + lkm_flags &= ~LKM_CONVERT; + } else { + lockres->l_action = OCFS2_AST_CONVERT; + lkm_flags |= LKM_CONVERT; + } + lockres->l_requested = level; lockres_or_flags(lockres, OCFS2_LOCK_BUSY); spin_unlock_irqrestore(&lockres->l_lock, flags); @@ -1021,7 +1016,7 @@ again: status = dlmlock(osb->dlm, level, &lockres->l_lksb, - lkm_flags|LKM_CONVERT, + lkm_flags, lockres->l_name, OCFS2_LOCK_ID_MAX_LEN - 1, ocfs2_locking_ast, |