ocfs2/dlm: remove potential deadlock -V3
authorWengang Wang <wen.gang.wang@oracle.com>
Fri, 30 Jul 2010 15:18:00 +0000 (23:18 +0800)
committerJoel Becker <joel.becker@oracle.com>
Sat, 7 Aug 2010 17:50:30 +0000 (10:50 -0700)
commitb11f1f1ab73fd358b1b734a9427744802202ba68
tree4dcb8730d6d448ffa6414e9b8a3589c88e5d823f
parenta524812b7eaa7783d7811198921100f079034e61
ocfs2/dlm: remove potential deadlock -V3

When we need to take both dlm_domain_lock and dlm->spinlock, we should take
them in order of: dlm_domain_lock then dlm->spinlock.

There is pathes disobey this order. That is calling dlm_lockres_put() with
dlm->spinlock held in dlm_run_purge_list. dlm_lockres_put() calls dlm_put() at
the ref and dlm_put() locks on dlm_domain_lock.

Fix:
Don't grab/put the dlm when the initialising/releasing lockres.
That grab is not required because we don't call dlm_unregister_domain()
based on refcount.

Signed-off-by: Wengang Wang <wen.gang.wang@oracle.com>
Cc: stable@kernel.org
Signed-off-by: Joel Becker <joel.becker@oracle.com>
fs/ocfs2/dlm/dlmmaster.c