diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2009-09-23 12:29:20 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-09-23 12:29:20 -0400 |
commit | b64ada6b23d4a305fb3ca59b79dd38707fc53b69 (patch) | |
tree | 61bc87dc3a2549f54231261aaa544acffcd12281 /fs/ocfs2/dlm/dlmthread.c | |
parent | be90a49ca22a95f184d9f32d35b5247b44032849 (diff) | |
parent | b80474b432913f73cce8db001e9fa3104f9b79ee (diff) |
Merge branch 'upstream-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jlbec/ocfs2
* 'upstream-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jlbec/ocfs2: (85 commits)
ocfs2: Use buffer IO if we are appending a file.
ocfs2: add spinlock protection when dealing with lockres->purge.
dlmglue.c: add missed mlog lines
ocfs2: __ocfs2_abort() should not enable panic for local mounts
ocfs2: Add ioctl for reflink.
ocfs2: Enable refcount tree support.
ocfs2: Implement ocfs2_reflink.
ocfs2: Add preserve to reflink.
ocfs2: Create reflinked file in orphan dir.
ocfs2: Use proper parameter for some inode operation.
ocfs2: Make transaction extend more efficient.
ocfs2: Don't merge in 1st refcount ops of reflink.
ocfs2: Modify removing xattr process for refcount.
ocfs2: Add reflink support for xattr.
ocfs2: Create an xattr indexed block if needed.
ocfs2: Call refcount tree remove process properly.
ocfs2: Attach xattr clusters to refcount tree.
ocfs2: Abstract ocfs2 xattr tree extend rec iteration process.
ocfs2: Abstract the creation of xattr block.
ocfs2: Remove inode from ocfs2_xattr_bucket_get_name_value.
...
Diffstat (limited to 'fs/ocfs2/dlm/dlmthread.c')
-rw-r--r-- | fs/ocfs2/dlm/dlmthread.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/fs/ocfs2/dlm/dlmthread.c b/fs/ocfs2/dlm/dlmthread.c index d490b66ad9d7..98569e86c613 100644 --- a/fs/ocfs2/dlm/dlmthread.c +++ b/fs/ocfs2/dlm/dlmthread.c | |||
@@ -212,14 +212,18 @@ static int dlm_purge_lockres(struct dlm_ctxt *dlm, | |||
212 | spin_lock(&dlm->spinlock); | 212 | spin_lock(&dlm->spinlock); |
213 | } | 213 | } |
214 | 214 | ||
215 | spin_lock(&res->spinlock); | ||
215 | if (!list_empty(&res->purge)) { | 216 | if (!list_empty(&res->purge)) { |
216 | mlog(0, "removing lockres %.*s:%p from purgelist, " | 217 | mlog(0, "removing lockres %.*s:%p from purgelist, " |
217 | "master = %d\n", res->lockname.len, res->lockname.name, | 218 | "master = %d\n", res->lockname.len, res->lockname.name, |
218 | res, master); | 219 | res, master); |
219 | list_del_init(&res->purge); | 220 | list_del_init(&res->purge); |
221 | spin_unlock(&res->spinlock); | ||
220 | dlm_lockres_put(res); | 222 | dlm_lockres_put(res); |
221 | dlm->purge_count--; | 223 | dlm->purge_count--; |
222 | } | 224 | } else |
225 | spin_unlock(&res->spinlock); | ||
226 | |||
223 | __dlm_unhash_lockres(res); | 227 | __dlm_unhash_lockres(res); |
224 | 228 | ||
225 | /* lockres is not in the hash now. drop the flag and wake up | 229 | /* lockres is not in the hash now. drop the flag and wake up |