Srinivas Eeda cb79662bc2 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 <srinivas.eeda@oracle.com>
Cc: Mark Fasheh <mfasheh@suse.com>
Cc: Joel Becker <jlbec@evilplan.org>
Reviewed-by: Wengang Wang <wen.gang.wang@oracle.com>
Tested-by: Joseph Qi <joseph.qi@huawei.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2014-12-10 17:41:03 -08:00
..
2014-10-09 02:39:04 -04:00
2014-08-08 15:57:24 -07:00
2014-10-14 08:40:15 +02:00
2014-11-13 22:19:05 +03:00
2014-08-08 15:57:20 -07:00
2014-12-03 09:36:03 -08:00
2014-10-09 02:38:57 -04:00
2014-08-07 14:40:09 -04:00
2014-10-16 12:53:35 +01:00
2014-11-20 16:40:02 +01:00
2014-10-09 13:06:14 +02:00
2014-11-07 08:33:52 +11:00
2014-08-07 14:40:09 -04:00
2014-11-18 02:01:40 +01:00
2014-10-24 00:14:38 +02:00
2014-10-24 00:14:35 +02:00
2014-08-26 09:35:56 +02:00
2014-08-27 11:17:48 +02:00