diff options
author | Xue jiufei <xuejiufei@huawei.com> | 2014-06-23 13:22:09 -0700 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2014-06-23 16:47:45 -0700 |
commit | ac4fef4d23ed879a7fd11ab24ccd2e1464277e9a (patch) | |
tree | 6f5139c8f615683b688d27f3d5f628cc140465bc /COPYING | |
parent | b9aaac5a6b7d228435fcb80963d41c274406011b (diff) | |
download | op-kernel-dev-ac4fef4d23ed879a7fd11ab24ccd2e1464277e9a.zip op-kernel-dev-ac4fef4d23ed879a7fd11ab24ccd2e1464277e9a.tar.gz |
ocfs2/dlm: do not purge lockres that is queued for assert master
When workqueue is delayed, it may occur that a lockres is purged while it
is still queued for master assert. it may trigger BUG() as follows.
N1 N2
dlm_get_lockres()
->dlm_do_master_requery
is the master of lockres,
so queue assert_master work
dlm_thread() start running
and purge the lockres
dlm_assert_master_worker()
send assert master message
to other nodes
receiving the assert_master
message, set master to N2
dlmlock_remote() send create_lock message to N2, but receive DLM_IVLOCKID,
if it is RECOVERY lockres, it triggers the BUG().
Another BUG() is triggered when N3 become the new master and send
assert_master to N1, N1 will trigger the BUG() because owner doesn't
match. So we should not purge lockres when it is queued for assert
master.
Signed-off-by: joyce.xue <xuejiufei@huawei.com>
Reviewed-by: Mark Fasheh <mfasheh@suse.de>
Cc: Joel Becker <jlbec@evilplan.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'COPYING')
0 files changed, 0 insertions, 0 deletions