]> git.ipfire.org Git - ipfire-2.x.git/blame - src/patches/suse-2.6.27.31/patches.fixes/ocfs2-dlm-do-not-purge-lockres-that-is-being-migrat.patch
Move xen patchset to new version's subdir.
[ipfire-2.x.git] / src / patches / suse-2.6.27.31 / patches.fixes / ocfs2-dlm-do-not-purge-lockres-that-is-being-migrat.patch
CommitLineData
00e5a55c
BS
1From: Sunil Mushran <sunil.mushran@oracle.com>
2Date: Thu, 26 Feb 2009 15:00:48 -0800
3Subject: ocfs2/dlm: Do not purge lockres that is being migrated dlm_purge_lockres()
4Patch-mainline: 2.6.30
5References: bnc#408304
6
7This patch attempts to fix a fine race between purging and migration.
8
9Signed-off-by: Sunil Mushran <sunil.mushran@oracle.com>
10Signed-off-by: Mark Fasheh <mfasheh@suse.com>
11---
12 fs/ocfs2/dlm/dlmthread.c | 20 ++++++++++++++++++--
13 1 files changed, 18 insertions(+), 2 deletions(-)
14
15Index: linux-2.6.27-sle11_ocfs2_update/fs/ocfs2/dlm/dlmthread.c
16===================================================================
17--- linux-2.6.27-sle11_ocfs2_update.orig/fs/ocfs2/dlm/dlmthread.c
18+++ linux-2.6.27-sle11_ocfs2_update/fs/ocfs2/dlm/dlmthread.c
19@@ -162,12 +162,28 @@ static int dlm_purge_lockres(struct dlm_
20
21 spin_lock(&res->spinlock);
22 if (!__dlm_lockres_unused(res)) {
23- spin_unlock(&res->spinlock);
24 mlog(0, "%s:%.*s: tried to purge but not unused\n",
25 dlm->name, res->lockname.len, res->lockname.name);
26- return -ENOTEMPTY;
27+ __dlm_print_one_lock_resource(res);
28+ spin_unlock(&res->spinlock);
29+ BUG();
30 }
31+
32+ if (res->state & DLM_LOCK_RES_MIGRATING) {
33+ mlog(0, "%s:%.*s: Delay dropref as this lockres is "
34+ "being remastered\n", dlm->name, res->lockname.len,
35+ res->lockname.name);
36+ /* Re-add the lockres to the end of the purge list */
37+ if (!list_empty(&res->purge)) {
38+ list_del_init(&res->purge);
39+ list_add_tail(&res->purge, &dlm->purge_list);
40+ }
41+ spin_unlock(&res->spinlock);
42+ return 0;
43+ }
44+
45 master = (res->owner == dlm->node_num);
46+
47 if (!master)
48 res->state |= DLM_LOCK_RES_DROPPING_REF;
49 spin_unlock(&res->spinlock);