From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:60717) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1c8sRn-00022I-2t for qemu-devel@nongnu.org; Mon, 21 Nov 2016 12:32:08 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1c8sRk-0008QJ-0C for qemu-devel@nongnu.org; Mon, 21 Nov 2016 12:32:03 -0500 From: Kevin Wolf Date: Mon, 21 Nov 2016 18:31:28 +0100 Message-Id: <1479749488-31808-9-git-send-email-kwolf@redhat.com> In-Reply-To: <1479749488-31808-1-git-send-email-kwolf@redhat.com> References: <1479749488-31808-1-git-send-email-kwolf@redhat.com> Subject: [Qemu-devel] [PATCH 8/8] quorum: Inline quorum_fifo_aio_cb() List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-block@nongnu.org Cc: kwolf@redhat.com, berto@igalia.com, eblake@redhat.com, mreitz@redhat.com, qemu-devel@nongnu.org Inlining the function removes some boilerplace code and replaces recursion by a simple loop, so the code becomes somewhat easier to understand. Signed-off-by: Kevin Wolf Reviewed-by: Alberto Garcia --- block/quorum.c | 42 +++++++++++++----------------------------- 1 file changed, 13 insertions(+), 29 deletions(-) diff --git a/block/quorum.c b/block/quorum.c index ae0fe05..ff287bf 100644 --- a/block/quorum.c +++ b/block/quorum.c @@ -250,30 +250,6 @@ static void quorum_report_bad_acb(QuorumChildRequest *sacb, int ret) quorum_report_bad(type, acb->offset, acb->bytes, sacb->bs->node_name, ret); } -static int quorum_fifo_aio_cb(void *opaque, int ret) -{ - QuorumChildRequest *sacb = opaque; - QuorumAIOCB *acb = sacb->parent; - BDRVQuorumState *s = acb->bs->opaque; - - assert(acb->is_read && s->read_pattern == QUORUM_READ_PATTERN_FIFO); - - if (ret < 0) { - quorum_report_bad_acb(sacb, ret); - - /* We try to read next child in FIFO order if we fail to read */ - if (acb->children_read < s->num_children) { - return read_fifo_child(acb); - } - } - - acb->vote_ret = ret; - - /* FIXME: rewrite failed children if acb->children_read > 1? */ - - return ret; -} - static void quorum_report_bad_versions(BDRVQuorumState *s, QuorumAIOCB *acb, QuorumVoteValue *value) @@ -683,12 +659,20 @@ static int read_quorum_children(QuorumAIOCB *acb) static int read_fifo_child(QuorumAIOCB *acb) { BDRVQuorumState *s = acb->bs->opaque; - int n = acb->children_read++; - int ret; + int n, ret; + + /* We try to read the next child in FIFO order if we failed to read */ + do { + n = acb->children_read++; + acb->qcrs[n].bs = s->children[n]->bs; + ret = bdrv_co_preadv(s->children[n], acb->offset, acb->bytes, + acb->qiov, 0); + if (ret < 0) { + quorum_report_bad_acb(&acb->qcrs[n], ret); + } + } while (ret < 0 && acb->children_read < s->num_children); - acb->qcrs[n].bs = s->children[n]->bs; - ret = bdrv_co_preadv(s->children[n], acb->offset, acb->bytes, acb->qiov, 0); - ret = quorum_fifo_aio_cb(&acb->qcrs[n], ret); + /* FIXME: rewrite failed children if acb->children_read > 1? */ return ret; } -- 1.8.3.1