From: Kevin Wolf <kwolf@redhat.com>
To: Juan Quintela <quintela@trasno.org>
Cc: qemu-devel@nongnu.org
Subject: [Qemu-devel] Re: [PATCH v3 1/2] Add bdrv_aio_multiwrite
Date: Thu, 10 Sep 2009 09:07:10 +0200 [thread overview]
Message-ID: <4AA8A59E.9090206@redhat.com> (raw)
In-Reply-To: <m3ocpj67ip.fsf@neno.mitica>
Am 10.09.2009 01:08, schrieb Juan Quintela:
> Kevin Wolf <kwolf@redhat.com> wrote:
>
> Hi again
>
>
>> + QEMUIOVector *qiov = qemu_mallocz(sizeof(*qiov));
>> + qemu_iovec_init(qiov,
>> + reqs[outidx].qiov->niov + reqs[i].qiov->niov + 1);
>> +
>> + // Add the first request to the merged one. If the requests are
>> + // overlapping, drop the last sectors of the first request.
>> + size = (reqs[i].sector - reqs[outidx].sector) << 9;
>> + qemu_iovec_concat(qiov, reqs[outidx].qiov, size);
>> +
>> + // We might need to add some zeros between the two requests
>> + if (reqs[i].sector > oldreq_last) {
>> + size_t zero_bytes = (reqs[i].sector - oldreq_last) << 9;
>> + uint8_t *buf = qemu_blockalign(bs, zero_bytes);
>> + memset(buf, 0, zero_bytes);
>> + qemu_iovec_add(qiov, buf, zero_bytes);
>> + mcb->callbacks[i].free_buf = buf;
>> + }
>> +
>> + // Add the second request
>> + qemu_iovec_concat(qiov, reqs[i].qiov, reqs[i].qiov->size);
>> +
>> + reqs[outidx].nb_sectors += reqs[i].nb_sectors;
>> + reqs[outidx].qiov = qiov;
>
> What frees reqs[outidx].qiov previous value, or new one for that matter?
Your decision where to stop quoting the code is kind of funny. The very
next line is:
mcb->callbacks[i].free_qiov = reqs[outidx].qiov;
This saves each newly allocated qiov. It is later freed in
multiwrite_user_cb. To free the original value of qiov is the task of
the caller.
> I can't see where it is done. As far as I can see, we are losing both
> the ones that we are overwritten and the ones for the request that got merged.
Hope you see them now. :-)
Kevin
next prev parent reply other threads:[~2009-09-10 7:08 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-09-09 15:53 [Qemu-devel] [PATCH v3 0/2] block: Handle multiple write requests at once Kevin Wolf
2009-09-09 15:53 ` [Qemu-devel] [PATCH v3 1/2] Add bdrv_aio_multiwrite Kevin Wolf
[not found] ` <m3ocpj67ip.fsf@neno.mitica>
2009-09-10 7:07 ` Kevin Wolf [this message]
2009-09-10 22:44 ` Christoph Hellwig
2009-09-11 6:29 ` Kevin Wolf
2009-09-11 18:36 ` Christoph Hellwig
2009-09-09 15:53 ` [Qemu-devel] [PATCH v3 2/2] virtio-blk: Use bdrv_aio_multiwrite Kevin Wolf
2009-09-10 22:41 ` Christoph Hellwig
2009-09-11 7:10 ` Kevin Wolf
2009-09-11 18:39 ` Christoph Hellwig
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=4AA8A59E.9090206@redhat.com \
--to=kwolf@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=quintela@trasno.org \
/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).