To block replication, we only need to read from the first child. Signed-off-by: Wen Congyang <we...@cn.fujitsu.com> Signed-off-by: zhanghailiang <zhang.zhanghaili...@huawei.com> Signed-off-by: Gonglei <arei.gong...@huawei.com> Cc: Luiz Capitulino <lcapitul...@redhat.com> Cc: Michael Roth <mdr...@linux.vnet.ibm.com> --- block/quorum.c | 5 +++-- qapi/block-core.json | 4 +++- 2 files changed, 6 insertions(+), 3 deletions(-)
diff --git a/block/quorum.c b/block/quorum.c index 437b122..5ed1ff8 100644 --- a/block/quorum.c +++ b/block/quorum.c @@ -286,9 +286,10 @@ static void quorum_aio_cb(void *opaque, int ret) BDRVQuorumState *s = acb->common.bs->opaque; bool rewrite = false; - if (acb->is_read && s->read_pattern == QUORUM_READ_PATTERN_FIFO) { + if (acb->is_read && s->read_pattern != QUORUM_READ_PATTERN_QUORUM) { /* We try to read next child in FIFO order if we fail to read */ - if (ret < 0 && ++acb->child_iter < s->num_children) { + if (s->read_pattern == QUORUM_READ_PATTERN_FIFO && + ret < 0 && ++acb->child_iter < s->num_children) { read_fifo_child(acb); return; } diff --git a/qapi/block-core.json b/qapi/block-core.json index a3fdaf0..d6382e9 100644 --- a/qapi/block-core.json +++ b/qapi/block-core.json @@ -1618,9 +1618,11 @@ # # @fifo: read only from the first child that has not failed # +# @first: read only from the first child +# # Since: 2.2 ## -{ 'enum': 'QuorumReadPattern', 'data': [ 'quorum', 'fifo' ] } +{ 'enum': 'QuorumReadPattern', 'data': [ 'quorum', 'fifo', 'first' ] } ## # @BlockdevOptionsQuorum -- 2.1.0