From: Kevin Wolf <kwolf@redhat.com>
To: Max Reitz <mreitz@redhat.com>
Cc: qemu-devel@nongnu.org, qemu-block@nongnu.org
Subject: Re: [Qemu-devel] [PATCH] qcow2: Make qcow2_alloc_bytes() more explicit
Date: Fri, 11 Sep 2015 19:53:09 +0200 [thread overview]
Message-ID: <20150911175309.GD5164@noname.redhat.com> (raw)
In-Reply-To: <1441990071-7205-1-git-send-email-mreitz@redhat.com>
Am 11.09.2015 um 18:47 hat Max Reitz geschrieben:
> In case of -EAGAIN returned by update_refcount(), we should discard the
> cluster offset we were trying to allocate and request a new one, because
> in theory that old offset might now be taken by a refcount block.
>
> In practice, this was not the case due to update_refcount() generally
> returning strictly monotonic increasing cluster offsets. However, this
> behavior is not set in stone, and it is also not obvious when looking at
> qcow2_alloc_bytes() alone, so we should not rely on it.
>
> Reported-by: Kevin Wolf <kwolf@redhat.com>
> Signed-off-by: Max Reitz <mreitz@redhat.com>
> ---
> block/qcow2-refcount.c | 6 ++++++
> 1 file changed, 6 insertions(+)
>
> diff --git a/block/qcow2-refcount.c b/block/qcow2-refcount.c
> index e8430ec..c30bb14 100644
> --- a/block/qcow2-refcount.c
> +++ b/block/qcow2-refcount.c
> @@ -949,11 +949,17 @@ int64_t qcow2_alloc_bytes(BlockDriverState *bs, int size)
>
> if (!offset || ROUND_UP(offset, s->cluster_size) != new_cluster) {
> offset = new_cluster;
> + free_in_cluster = s->cluster_size;
> + } else {
> + free_in_cluster += s->cluster_size;
> }
> }
This doesn't actually do anything except confuse the reader, but as
the value of free_in_cluster doesn't matter in the second iteration
because offset == 0, this is correct.
> assert(offset);
> ret = update_refcount(bs, offset, size, 1, false, QCOW2_DISCARD_NEVER);
> + if (ret < 0) {
> + offset = 0;
> + }
> } while (ret == -EAGAIN);
> if (ret < 0) {
> return ret;
Thanks, applied to the block branch.
Kevin
prev parent reply other threads:[~2015-09-11 17:53 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-09-11 16:47 [Qemu-devel] [PATCH] qcow2: Make qcow2_alloc_bytes() more explicit Max Reitz
2015-09-11 17:53 ` Kevin Wolf [this message]
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=20150911175309.GD5164@noname.redhat.com \
--to=kwolf@redhat.com \
--cc=mreitz@redhat.com \
--cc=qemu-block@nongnu.org \
--cc=qemu-devel@nongnu.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.