From: Xue jiufei Date: Tue, 12 Nov 2013 23:07:00 +0000 (-0800) Subject: ocfs2: delay migration when the lockres is in migration state X-Git-Tag: accepted/tizen/common/20141203.182822~1142^2~255 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=fae477b6f005d6bd8a6fb3f052b30d55cfa70c26;p=platform%2Fkernel%2Flinux-arm64.git ocfs2: delay migration when the lockres is in migration state We trigger a bug in __dlm_lockres_reserve_ast() when we parallel umount 4 nodes. The situation is as follows: 1) Node A migrate all lockres it owned(eg. lockres A) to other nodes say node B when it umounts. 2) Receiving MIG_LOCKRES message from A, Node B masters the lockres A with DLM_LOCK_RES_MIGRATING state set. 3) Then we umount ocfs2 on node B. It also should migrate lockres A to another node, say node C. But now, DLM_LOCK_RES_MIGRATING state of lockers A is not cleared. Node B triggered the BUG on lockres with state DLM_LOCK_RES_MIGRATING. Signed-off-by: Xuejiufei Signed-off-by: Joel Becker Cc: Mark Fasheh Cc: Tariq Saeed Cc: Srinivas Eeda Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds --- diff --git a/fs/ocfs2/dlm/dlmmaster.c b/fs/ocfs2/dlm/dlmmaster.c index cf0f103..5a0ef78 100644 --- a/fs/ocfs2/dlm/dlmmaster.c +++ b/fs/ocfs2/dlm/dlmmaster.c @@ -2354,6 +2354,10 @@ static int dlm_is_lockres_migrateable(struct dlm_ctxt *dlm, assert_spin_locked(&res->spinlock); + /* delay migration when the lockres is in MIGRATING state */ + if (res->state & DLM_LOCK_RES_MIGRATING) + return 0; + if (res->owner != dlm->node_num) return 0;