summaryrefslogtreecommitdiffstats
path: root/fs/ocfs2/dlm
diff options
context:
space:
mode:
authorIngo Molnar <mingo@kernel.org>2015-05-11 16:05:09 +0200
committerIngo Molnar <mingo@kernel.org>2015-05-11 16:05:09 +0200
commit191a66353b22fad8ac89404ab4c929cbe7b0afb2 (patch)
treebd7affc4bc640eb42e5ff3285922497285f8fdd7 /fs/ocfs2/dlm
parentf5d6a52f511157c7476590532a23b5664b1ed877 (diff)
parentf21262b8e092a770e39fbd405cc18a0247c3af68 (diff)
downloadtalos-op-linux-191a66353b22fad8ac89404ab4c929cbe7b0afb2.tar.gz
talos-op-linux-191a66353b22fad8ac89404ab4c929cbe7b0afb2.zip
Merge branch 'x86/asm' into x86/apic, to resolve a conflict
Conflicts: arch/x86/kernel/apic/io_apic.c arch/x86/kernel/apic/vector.c Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'fs/ocfs2/dlm')
-rw-r--r--fs/ocfs2/dlm/dlmmaster.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/fs/ocfs2/dlm/dlmmaster.c b/fs/ocfs2/dlm/dlmmaster.c
index a6944b25fd5b..fdf4b41d0609 100644
--- a/fs/ocfs2/dlm/dlmmaster.c
+++ b/fs/ocfs2/dlm/dlmmaster.c
@@ -757,6 +757,19 @@ lookup:
if (tmpres) {
spin_unlock(&dlm->spinlock);
spin_lock(&tmpres->spinlock);
+
+ /*
+ * Right after dlm spinlock was released, dlm_thread could have
+ * purged the lockres. Check if lockres got unhashed. If so
+ * start over.
+ */
+ if (hlist_unhashed(&tmpres->hash_node)) {
+ spin_unlock(&tmpres->spinlock);
+ dlm_lockres_put(tmpres);
+ tmpres = NULL;
+ goto lookup;
+ }
+
/* Wait on the thread that is mastering the resource */
if (tmpres->owner == DLM_LOCK_RES_OWNER_UNKNOWN) {
__dlm_wait_on_lockres(tmpres);
OpenPOWER on IntegriCloud