From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:43228) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YPzkd-0003Cb-MP for qemu-devel@nongnu.org; Mon, 23 Feb 2015 15:37:12 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1YPzka-0001kK-CE for qemu-devel@nongnu.org; Mon, 23 Feb 2015 15:37:11 -0500 Received: from mx1.redhat.com ([209.132.183.28]:42178) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YPzka-0001kE-55 for qemu-devel@nongnu.org; Mon, 23 Feb 2015 15:37:08 -0500 Message-ID: <54EB8F4C.8040002@redhat.com> Date: Mon, 23 Feb 2015 15:36:28 -0500 From: Max Reitz MIME-Version: 1.0 References: <1423710438-14377-1-git-send-email-wency@cn.fujitsu.com> <1423710438-14377-3-git-send-email-wency@cn.fujitsu.com> In-Reply-To: <1423710438-14377-3-git-send-email-wency@cn.fujitsu.com> Content-Type: text/plain; charset=iso-8859-15; format=flowed Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [RFC PATCH 02/14] quorom: add a new read pattern List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Wen Congyang , qemu devel , Kevin Wolf , Stefan Hajnoczi , Paolo Bonzini Cc: Lai Jiangshan , Jiang Yunhong , Dong Eddie , "Dr. David Alan Gilbert" , Luiz Capitulino , Gonglei , Yang Hongyang , Michael Roth , zhanghailiang On 2015-02-11 at 22:07, Wen Congyang wrote: > To block replication, we only need to read from the first child. > > Signed-off-by: Wen Congyang > Signed-off-by: zhanghailiang > Signed-off-by: Gonglei > Cc: Luiz Capitulino > Cc: Michael Roth > --- > 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) { Maybe I'd prefer "&& (s->read_pattern == QUORUM_READ_PATTERN_FIFO || s->read_pattern == QUORUM_READ_PATTERN_FIRST)"; but it does fit with what quorum_aio_readv() does, so I'm fine with it. > /* We try to read next child in FIFO order if we fail to read */ However, I think this comment should be modified, because in fact we do not try to read the next child if s->read_pattern == QUORUM_READ_PATTERN_FIRST. > - 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 There should be version info here (like "(Since 2.3)"). Max > +# > # Since: 2.2 > ## > -{ 'enum': 'QuorumReadPattern', 'data': [ 'quorum', 'fifo' ] } > +{ 'enum': 'QuorumReadPattern', 'data': [ 'quorum', 'fifo', 'first' ] } > > ## > # @BlockdevOptionsQuorum