From: Srinivas Eeda Date: Wed, 10 Dec 2014 23:41:48 +0000 (-0800) Subject: ocfs2: o2dlm: fix a race between purge and master query X-Git-Tag: omap-for-v3.19/fixes-rc1~142^2~176 X-Git-Url: http://git.openpandora.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=cb79662bc2f83f7b3b60970ad88df43085f96514;p=pandora-kernel.git ocfs2: o2dlm: fix a race between purge and master query Node A sends master query request to node B which is the master. At this time lockres happens to be on purgelist. dlm_master_request_handler gets the dlm spinlock, finds the resource and releases the dlm spin lock. Right at this dlm_thread on this node could purge the lockres. dlm_master_request_handler can then acquire lockres spinlock and reply to Node A that node B is the master even though lockres on node B is purged. The above scenario will now make node A falsely think node B is the master which is inconsistent. Further if another node C tries to master the same resource, every node will respond they are not the master. Node C then masters the resource and sends assert master to all nodes. This will now make node A crash with the following message. dlm_assert_master_handler:1831 ERROR: DIE! Mastery assert from 9, but current owner is 10! Signed-off-by: Srinivas Eeda Cc: Mark Fasheh Cc: Joel Becker Reviewed-by: Wengang Wang Tested-by: Joseph Qi Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds --- Reading git-diff-tree failed