diff options
author | Guoqing Jiang <gqjiang@suse.com> | 2015-07-10 17:01:15 +0800 |
---|---|---|
committer | NeilBrown <neilb@suse.com> | 2015-08-31 19:41:41 +0200 |
commit | 66099bb0ee6c20f91ace3fa5f82202fbceb67d8e (patch) | |
tree | 9b5be424509589322b12a9a6d1571e0b32111731 /Documentation/md-cluster.txt | |
parent | dc737d7c3d62d2cd2b62c7739aaa7604330c3dd8 (diff) | |
download | talos-obmc-linux-66099bb0ee6c20f91ace3fa5f82202fbceb67d8e.tar.gz talos-obmc-linux-66099bb0ee6c20f91ace3fa5f82202fbceb67d8e.zip |
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>
Diffstat (limited to 'Documentation/md-cluster.txt')
-rw-r--r-- | Documentation/md-cluster.txt | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/Documentation/md-cluster.txt b/Documentation/md-cluster.txt index de1af7db3355..1b794369e03a 100644 --- a/Documentation/md-cluster.txt +++ b/Documentation/md-cluster.txt @@ -91,7 +91,7 @@ The algorithm is: this message inappropriate or redundant. 3. sender write LVB. - sender down-convert MESSAGE from EX to CR + sender down-convert MESSAGE from EX to CW sender try to get EX of ACK [ wait until all receiver has *processed* the MESSAGE ] @@ -112,7 +112,7 @@ The algorithm is: sender down-convert ACK from EX to CR sender release MESSAGE sender release TOKEN - receiver upconvert to EX of MESSAGE + receiver upconvert to PR of MESSAGE receiver get CR of ACK receiver release MESSAGE |