qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Kevin Wolf <kwolf@redhat.com>
To: Max Reitz <mreitz@redhat.com>
Cc: "Benoît Canet" <benoit.canet@irqsave.net>,
	famz@redhat.com, "Benoît Canet" <benoit@irqsave.net>,
	qemu-devel@nongnu.org, stefanha@redhat.com
Subject: Re: [Qemu-devel] [PATCH V17 05/12] quorum: Add quorum_aio_readv.
Date: Mon, 17 Feb 2014 11:57:09 +0100	[thread overview]
Message-ID: <20140217105709.GF3502@dhcp-200-207.str.redhat.com> (raw)
In-Reply-To: <52FEC576.9040205@redhat.com>

Am 15.02.2014 um 02:40 hat Max Reitz geschrieben:
> On 12.02.2014 23:06, Benoît Canet wrote:
> >From: Benoît Canet <benoit@irqsave.net>
> >
> >Add code to do num_children reads in parallel and cleanup the structures
> >afterward.
> 
> "afterwards"
> 
> >Signed-off-by: Benoit Canet <benoit@irqsave.net>
> >Reviewed-by: Max Reitz <mreitz@redhat.com>
> >---
> >  block/quorum.c | 39 ++++++++++++++++++++++++++++++++++++++-
> >  1 file changed, 38 insertions(+), 1 deletion(-)
> >
> >diff --git a/block/quorum.c b/block/quorum.c
> >index 197cdca..c7a5d79 100644
> >--- a/block/quorum.c
> >+++ b/block/quorum.c
> >@@ -91,10 +91,18 @@ static AIOCBInfo quorum_aiocb_info = {
> >  static void quorum_aio_finalize(QuorumAIOCB *acb)
> >  {
> >-    int ret = 0;
> >+    BDRVQuorumState *s = acb->common.bs->opaque;
> >+    int i, ret = 0;
> >      acb->common.cb(acb->common.opaque, ret);
> >+    if (acb->is_read) {
> >+        for (i = 0; i < s->num_children; i++) {
> >+            qemu_vfree(acb->qcrs[i].buf);
> >+            qemu_iovec_destroy(&acb->qcrs[i].qiov);
> >+        }
> >+    }
> >+
> >      g_free(acb->qcrs);
> >      qemu_aio_release(acb);
> >  }
> >@@ -149,6 +157,34 @@ static void quorum_aio_cb(void *opaque, int ret)
> >      quorum_aio_finalize(acb);
> >  }
> >+static BlockDriverAIOCB *quorum_aio_readv(BlockDriverState *bs,
> >+                                         int64_t sector_num,
> >+                                         QEMUIOVector *qiov,
> >+                                         int nb_sectors,
> >+                                         BlockDriverCompletionFunc *cb,
> >+                                         void *opaque)
> >+{
> >+    BDRVQuorumState *s = bs->opaque;
> >+    QuorumAIOCB *acb = quorum_aio_get(s, bs, qiov, sector_num,
> >+                                      nb_sectors, cb, opaque);
> >+    int i;
> >+
> >+    acb->is_read = true;
> >+
> >+    for (i = 0; i < s->num_children; i++) {
> >+        acb->qcrs[i].buf = qemu_blockalign(s->bs[i], qiov->size);
> >+        qemu_iovec_init(&acb->qcrs[i].qiov, qiov->niov);
> >+        qemu_iovec_clone(&acb->qcrs[i].qiov, qiov, acb->qcrs[i].buf);
> >+    }
> >+
> >+    for (i = 0; i < s->num_children; i++) {
> >+        bdrv_aio_readv(s->bs[i], sector_num, &acb->qcrs[i].qiov, nb_sectors,
> >+                       quorum_aio_cb, &acb->qcrs[i]);
> 
> I know Kevin told you to, but using the child's own QIOV here means
> quorum_aio_readv() won't work after this patch but only after patch
> 6. Just pointing it out, I don't like it, but Kevin told you to, so:

Sorry, but this is the entirely wrong attitude. Just because I am a
maintainer that doesn't mean that I don't get things wrong. When I talk
bullshit (and probably I do more often than others), just point it out.

In this case, I didn't even tell him to do the change, but I asked in
patch 6:

> Why don't you do this from the beginning?

The answer appears to be that the read data isn't copied back to the
original qiov yet, but this happens only in the quorum_copy_qiov() calls
in quorum_vote().

So this is a bug in this patch, which can be fixed either by reverting
to the old state of using the original qiov here, or (perhaps more
nicely) by introducing quorum_copy_qiov() already in this patch.

Kevin

  reply	other threads:[~2014-02-17 10:57 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-02-12 22:06 [Qemu-devel] [PATCH V17 00/12] quorum block filter Benoît Canet
2014-02-12 22:06 ` [Qemu-devel] [PATCH V17 01/12] quorum: Create quorum.c, add QuorumChildRequest and QuorumAIOCB Benoît Canet
2014-02-15  1:17   ` Max Reitz
2014-02-12 22:06 ` [Qemu-devel] [PATCH V17 02/12] quorum: Create BDRVQuorumState and BlkDriver and do init Benoît Canet
2014-02-15  1:22   ` Max Reitz
2014-02-12 22:06 ` [Qemu-devel] [PATCH V17 03/12] quorum: Add quorum_aio_writev and its dependencies Benoît Canet
2014-02-15  1:31   ` Max Reitz
2014-02-12 22:06 ` [Qemu-devel] [PATCH V17 04/12] blkverify: Extract qemu_iovec_clone() and qemu_iovec_compare() from blkverify Benoît Canet
2014-02-15  1:36   ` Max Reitz
2014-02-12 22:06 ` [Qemu-devel] [PATCH V17 05/12] quorum: Add quorum_aio_readv Benoît Canet
2014-02-15  1:40   ` Max Reitz
2014-02-17 10:57     ` Kevin Wolf [this message]
2014-02-12 22:06 ` [Qemu-devel] [PATCH V17 06/12] quorum: Add quorum mechanism Benoît Canet
2014-02-15  1:53   ` Max Reitz
2014-02-12 22:06 ` [Qemu-devel] [PATCH V17 07/12] quorum: Add quorum_getlength() Benoît Canet
2014-02-12 22:06 ` [Qemu-devel] [PATCH V17 08/12] quorum: Add quorum_invalidate_cache() Benoît Canet
2014-02-12 22:06 ` [Qemu-devel] [PATCH V17 09/12] quorum: Add quorum_co_flush() Benoît Canet
2014-02-15  1:54   ` Max Reitz
2014-02-12 22:06 ` [Qemu-devel] [PATCH V17 10/12] quorum: Implement recursive .bdrv_recurse_is_first_non_filter in quorum Benoît Canet
2014-02-12 22:06 ` [Qemu-devel] [PATCH V17 11/12] quorum: Add quorum_open() and quorum_close() Benoît Canet
2014-02-13  9:09   ` Benoît Canet
2014-02-18  4:06     ` Fam Zheng
2014-02-18 12:31       ` Benoît Canet
2014-02-15  2:02   ` Max Reitz
2014-02-12 22:06 ` [Qemu-devel] [PATCH V17 12/12] quorum: Add unit test Benoît Canet
2014-02-15  1:15 ` [Qemu-devel] [PATCH V17 00/12] quorum block filter Max Reitz
2014-02-15  2:04   ` Max Reitz

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20140217105709.GF3502@dhcp-200-207.str.redhat.com \
    --to=kwolf@redhat.com \
    --cc=benoit.canet@irqsave.net \
    --cc=benoit@irqsave.net \
    --cc=famz@redhat.com \
    --cc=mreitz@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=stefanha@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).