[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [RFC V2 06/10] quorum: Add quorum_aio_writev and its de
From: |
Stefan Hajnoczi |
Subject: |
Re: [Qemu-devel] [RFC V2 06/10] quorum: Add quorum_aio_writev and its dependencies. |
Date: |
Wed, 8 Aug 2012 16:37:13 +0100 |
On Tue, Aug 7, 2012 at 2:44 PM, Benoît Canet <address@hidden> wrote:
> +static int quorum_check_ret(QuorumAIOCB *acb)
> +{
> + int i, j;
> +
> + for (i = 0, j = 0; i <= 2; i++) {
> + if (acb->aios[0].ret) {
> + j++;
> + }
> + }
> +
> + if (j > 1) {
> + return -EIO;
> + }
> +
> + return 0;
> +}
Simpler version just scans the return values (also I think
acb->aios[0].ret should be acb->aios[i].ret):
static int quorum_check_ret(QuorumAIOCB *acb)
{
int i;
for (i = 0; i <= 2; i++) {
if (acb->aios[i].ret) {
return -EIO; /* or acb->aios[i].ret */
}
}
return 0;
}
> +
> +static void quorum_aio_bh(void *opaque)
> +{
> + QuorumAIOCB *acb = opaque;
> +
> + qemu_bh_delete(acb->bh);
> + acb->common.cb(acb->common.opaque, quorum_check_ret(acb));
> + if (acb->finished) {
> + *acb->finished = true;
> + }
> + qemu_aio_release(acb);
> +}
> +
> +static QuorumAIOCB *quorum_aio_get(BlockDriverState *bs,
> + QEMUIOVector *qiov,
> + int64_t sector_num,
> + int nb_sectors,
> + BlockDriverCompletionFunc *cb,
> + void *opaque)
> +{
> + QuorumAIOCB *acb = qemu_aio_get(&quorum_aio_pool, bs, cb, opaque);
> + int i;
> +
> + acb->qiov = qiov;
> + acb->bh = NULL;
> + acb->count = 0;
> + acb->sector_num = sector_num;
> + acb->nb_sectors = nb_sectors;
> + acb->vote = NULL;
> + acb->vote_ret = 0;
acb->finished = NULL;
[Qemu-devel] [RFC V2 09/10] quorum: Add quorum_aio_readv., Benoît Canet, 2012/08/07
[Qemu-devel] [RFC V2 07/10] blkverify: Make blkverify_iovec_clone() and blkverify_iovec_compare() public, Benoît Canet, 2012/08/07
[Qemu-devel] [RFC V2 10/10] quorum: Add quorum mechanism., Benoît Canet, 2012/08/07
Re: [Qemu-devel] [PATCH 00/10] Quorum disk image corruption resiliency, Stefan Hajnoczi, 2012/08/08