diff options
author | Wengang Wang <wen.gang.wang@oracle.com> | 2009-09-03 15:56:33 +0800 |
---|---|---|
committer | Joel Becker <joel.becker@oracle.com> | 2009-09-23 01:54:48 -0700 |
commit | 83e32d9044a4510fffdf65c2691a25c0ba84e259 (patch) | |
tree | 69bf3d8c663e51e7527d67341b3bb8d95b33e008 /fs | |
parent | d92bc5127b27f315ef0ef2c1e1829fd6a5cba54a (diff) | |
download | linux-83e32d9044a4510fffdf65c2691a25c0ba84e259.tar.gz linux-83e32d9044a4510fffdf65c2691a25c0ba84e259.tar.bz2 linux-83e32d9044a4510fffdf65c2691a25c0ba84e259.zip |
ocfs2: add spinlock protection when dealing with lockres->purge.
when we check/modify lockres->purge, we should with the protection of lockres->spinlock.
in dlm_purge_lockres(), the checking/modifying is not with the protectin.
this patch fixes it.
Signed-off-by: Wengang Wang <wen.gang.wang@oracle.com>
Signed-off-by: Joel Becker <joel.becker@oracle.com>
Diffstat (limited to 'fs')
-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, spin_lock(&dlm->spinlock); } + spin_lock(&res->spinlock); if (!list_empty(&res->purge)) { mlog(0, "removing lockres %.*s:%p from purgelist, " "master = %d\n", res->lockname.len, res->lockname.name, res, master); list_del_init(&res->purge); + spin_unlock(&res->spinlock); dlm_lockres_put(res); dlm->purge_count--; - } + } else + spin_unlock(&res->spinlock); + __dlm_unhash_lockres(res); /* lockres is not in the hash now. drop the flag and wake up |