diff options
author | Alex Shi <alex.shi@linaro.org> | 2015-06-25 16:17:21 +0800 |
---|---|---|
committer | Alex Shi <alex.shi@linaro.org> | 2015-06-25 16:19:06 +0800 |
commit | bd4e9a26373331ef6f185500c72a8836eb7c82d9 (patch) | |
tree | 13384e7649be7bb88ab9524efcbc602be85d5020 /fs/ocfs2/dlm/dlmmaster.c | |
parent | 2528dbd348dd541e090594b7aac3f62351078388 (diff) | |
parent | 2cb9802eeb7f919f97df05b16ec128f4f5af366d (diff) |
Merge branch 'linux-linaro-lsk-v3.14' into linux-linaro-lsk-v3.14-androidlsk-v3.14-15.07-android
Conflicts:
fs/exec.c
Solutions:
follow commit d221244a7
sched: move no_new_privs into new atomic flags
to use task_no_new_privs(current).
Diffstat (limited to 'fs/ocfs2/dlm/dlmmaster.c')
-rw-r--r-- | fs/ocfs2/dlm/dlmmaster.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/fs/ocfs2/dlm/dlmmaster.c b/fs/ocfs2/dlm/dlmmaster.c index 1be3398c96f6..1dd0bcc75536 100644 --- a/fs/ocfs2/dlm/dlmmaster.c +++ b/fs/ocfs2/dlm/dlmmaster.c @@ -726,6 +726,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); |