diff options
author | Sunil Mushran <sunil.mushran@oracle.com> | 2007-03-23 01:01:07 +0100 |
---|---|---|
committer | Mark Fasheh <mark.fasheh@oracle.com> | 2007-03-27 01:50:52 +0200 |
commit | 78062cb2e54ffe0df811dce5e68b54da9b8c9025 (patch) | |
tree | d360f3440fbe3489ef1c467f0b4b8ef196516ec2 /fs/ocfs2/dlm/dlmdomain.c | |
parent | Linux 2.6.21-rc5 (diff) | |
download | linux-78062cb2e54ffe0df811dce5e68b54da9b8c9025.tar.xz linux-78062cb2e54ffe0df811dce5e68b54da9b8c9025.zip |
ocfs2_dlm: Fix lockres ref counting bug
During umount, the umount thread migrates the lockres' and the dlm_thread
frees the empty lockres'. Due to a race, the reference counting on the
lockres goes awry leading to extra puts.
Signed-off-by: Sunil Mushran <sunil.mushran@oracle.com>
Signed-off-by: Mark Fasheh <mark.fasheh@oracle.com>
Diffstat (limited to 'fs/ocfs2/dlm/dlmdomain.c')
-rw-r--r-- | fs/ocfs2/dlm/dlmdomain.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/fs/ocfs2/dlm/dlmdomain.c b/fs/ocfs2/dlm/dlmdomain.c index 6087c4749fee..dbbac184c261 100644 --- a/fs/ocfs2/dlm/dlmdomain.c +++ b/fs/ocfs2/dlm/dlmdomain.c @@ -138,8 +138,10 @@ static void dlm_unregister_domain_handlers(struct dlm_ctxt *dlm); void __dlm_unhash_lockres(struct dlm_lock_resource *lockres) { - hlist_del_init(&lockres->hash_node); - dlm_lockres_put(lockres); + if (!hlist_unhashed(&lockres->hash_node)) { + hlist_del_init(&lockres->hash_node); + dlm_lockres_put(lockres); + } } void __dlm_insert_lockres(struct dlm_ctxt *dlm, |