md-cluster: fix deadlock issue on message lock
authorGuoqing Jiang <gqjiang@suse.com>
Fri, 10 Jul 2015 09:01:15 +0000 (17:01 +0800)
committerNeilBrown <neilb@suse.com>
Mon, 31 Aug 2015 17:41:41 +0000 (19:41 +0200)
commit66099bb0ee6c20f91ace3fa5f82202fbceb67d8e
tree9b5be424509589322b12a9a6d1571e0b32111731
parentdc737d7c3d62d2cd2b62c7739aaa7604330c3dd8
md-cluster: fix deadlock issue on message lock

There is problem with previous communication mechanism, and we got below
deadlock scenario with cluster which has 3 nodes.

Sender                     Receiver         Receiver

token(EX)
       message(EX)
      writes message
   downconverts message(CR)
      requests ack(EX)
                  get message(CR)            gets message(CR)
                   reads message                reads message
               requests EX on message    requests EX on message

To fix this problem, we do the following changes:

1. the sender downconverts MESSAGE to CW rather than CR.
2. and the receiver request PR lock not EX lock on message.

And in case we failed to down-convert EX to CW on message, it is better to
unlock message otherthan still hold the lock.

Reviewed-by: Goldwyn Rodrigues <rgoldwyn@suse.com>
Signed-off-by: Lidong Zhong <ldzhong@suse.com>
Signed-off-by: Guoqing Jiang <gqjiang@suse.com>
Signed-off-by: NeilBrown <neilb@suse.com>
Documentation/md-cluster.txt
drivers/md/md-cluster.c