qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [RFC V8 01/13] quorum: Create quorum.c, add QuorumSingl


From: Kevin Wolf
Subject: Re: [Qemu-devel] [RFC V8 01/13] quorum: Create quorum.c, add QuorumSingleAIOCB and QuorumAIOCB.
Date: Fri, 08 Feb 2013 11:15:58 +0100
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:13.0) Gecko/20120605 Thunderbird/13.0

Am 28.01.2013 18:07, schrieb Benoît Canet:
> Signed-off-by: Benoit Canet <address@hidden>
> ---
>  block/Makefile.objs |    1 +
>  block/quorum.c      |   45 +++++++++++++++++++++++++++++++++++++++++++++
>  2 files changed, 46 insertions(+)
>  create mode 100644 block/quorum.c
> 
> diff --git a/block/Makefile.objs b/block/Makefile.objs
> index c067f38..4143e34 100644
> --- a/block/Makefile.objs
> +++ b/block/Makefile.objs
> @@ -2,6 +2,7 @@ block-obj-y += raw.o cow.o qcow.o vdi.o vmdk.o cloop.o dmg.o 
> bochs.o vpc.o vvfat
>  block-obj-y += qcow2.o qcow2-refcount.o qcow2-cluster.o qcow2-snapshot.o 
> qcow2-cache.o
>  block-obj-y += qed.o qed-gencb.o qed-l2-cache.o qed-table.o qed-cluster.o
>  block-obj-y += qed-check.o
> +block-obj-y += quorum.o
>  block-obj-y += parallels.o blkdebug.o blkverify.o
>  block-obj-$(CONFIG_WIN32) += raw-win32.o win32-aio.o
>  block-obj-$(CONFIG_POSIX) += raw-posix.o
> diff --git a/block/quorum.c b/block/quorum.c
> new file mode 100644
> index 0000000..8dc6e4c
> --- /dev/null
> +++ b/block/quorum.c
> @@ -0,0 +1,45 @@
> +/*
> + * Quorum Block filter
> + *
> + * Copyright (C) 2012-2013 Nodalink, SARL.
> + *
> + * Author:
> + *   Benoît Canet <address@hidden>
> + *
> + * Based on the design and code of blkverify.c (Copyright (C) 2010 IBM, Corp)
> + * and blkmirror.c (Copyright (C) 2011 Red Hat, Inc).
> + *
> + * This work is licensed under the terms of the GNU GPL, version 2 or later.
> + * See the COPYING file in the top-level directory.
> + */
> +
> +#include "block/block_int.h"
> +
> +typedef struct QuorumAIOCB QuorumAIOCB;
> +
> +typedef struct QuorumSingleAIOCB {
> +    BlockDriverAIOCB *aiocb;
> +    QEMUIOVector qiov;
> +    uint8_t *buf;
> +    int ret;
> +    QuorumAIOCB *parent;
> +} QuorumSingleAIOCB;

It wouldn't hurt to add a comment describing what the struct is meant
for. I guess this one exists for each request that quorum issues against
the lower layers?

> +struct QuorumAIOCB {
> +    BlockDriverAIOCB common;
> +    QEMUBH *bh;
> +
> +    /* Request metadata */
> +    uint64_t sector_num;
> +    int nb_sectors;
> +
> +    QEMUIOVector *qiov;         /* calling readv IOV */
> +
> +    QuorumSingleAIOCB *aios;    /* individual AIOs */
> +    int count;                  /* number of completed AIOCB */
> +    int success_count;          /* number of successfully completed AIOCB */
> +    bool *finished;             /* completion signal for cancel */
> +
> +    void (*vote)(QuorumAIOCB *acb);
> +    int vote_ret;
> +};

And this one for all requests that quorum receives from upper layers?

Only for read requests or also write requests? The comment for .qiov
says "calling readv IOV", so what is used for writes?

Kevin



reply via email to

[Prev in Thread] Current Thread [Next in Thread]