From: Anthony Liguori <anthony@codemonkey.ws>
To: Kevin Wolf <kwolf@redhat.com>
Cc: qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [PATCH 2/4] qcow2: Move sync out of update_refcount
Date: Fri, 17 Sep 2010 12:06:39 -0500 [thread overview]
Message-ID: <4C93A01F.40706@codemonkey.ws> (raw)
In-Reply-To: <1284740318-20838-3-git-send-email-kwolf@redhat.com>
On 09/17/2010 11:18 AM, Kevin Wolf wrote:
> Note that the flush is omitted intentionally in qcow2_free_clusters. If
> anything, we can leak clusters here if we lose the writes.
>
> Signed-off-by: Kevin Wolf<kwolf@redhat.com>
>
Cluster leaking gets picked up by bdrv_check though, right?
I think I've convinced myself that leaking clusters is not an acceptable
behavior from a security perspective but as long as it's detectable via
bdrv_check, qcow2 could implement an online check to address it.
Regards,
Anthony Liguori
> ---
> block/qcow2-refcount.c | 13 +++++++++++--
> 1 files changed, 11 insertions(+), 2 deletions(-)
>
> diff --git a/block/qcow2-refcount.c b/block/qcow2-refcount.c
> index 7dc75d1..4fc3f80 100644
> --- a/block/qcow2-refcount.c
> +++ b/block/qcow2-refcount.c
> @@ -261,6 +261,8 @@ static int64_t alloc_refcount_block(BlockDriverState *bs, int64_t cluster_index)
> goto fail_block;
> }
>
> + bdrv_flush(bs->file);
> +
> /* Initialize the new refcount block only after updating its refcount,
> * update_refcount uses the refcount cache itself */
> memset(s->refcount_block_cache, 0, s->cluster_size);
> @@ -551,8 +553,6 @@ fail:
> dummy = update_refcount(bs, offset, cluster_offset - offset, -addend);
> }
>
> - bdrv_flush(bs->file);
> -
> return ret;
> }
>
> @@ -575,6 +575,8 @@ static int update_cluster_refcount(BlockDriverState *bs,
> return ret;
> }
>
> + bdrv_flush(bs->file);
> +
> return get_refcount(bs, cluster_index);
> }
>
> @@ -626,6 +628,9 @@ int64_t qcow2_alloc_clusters(BlockDriverState *bs, int64_t size)
> if (ret< 0) {
> return ret;
> }
> +
> + bdrv_flush(bs->file);
> +
> return offset;
> }
>
> @@ -803,6 +808,10 @@ int qcow2_update_snapshot_refcount(BlockDriverState *bs,
> if (ret< 0) {
> goto fail;
> }
> +
> + /* TODO Flushing once for the whole function should
> + * be enough */
> + bdrv_flush(bs->file);
> }
> /* compressed clusters are never modified */
> refcount = 2;
>
next prev parent reply other threads:[~2010-09-17 17:06 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-09-17 16:18 [Qemu-devel] [PATCH 0/4] qcow2: Save another common flush Kevin Wolf
2010-09-17 16:18 ` [Qemu-devel] [PATCH 1/4] qcow2: Move sync out of write_refcount_block_entries Kevin Wolf
2010-09-17 16:18 ` [Qemu-devel] [PATCH 2/4] qcow2: Move sync out of update_refcount Kevin Wolf
2010-09-17 17:06 ` Anthony Liguori [this message]
2010-09-17 17:19 ` Kevin Wolf
2010-09-17 16:18 ` [Qemu-devel] [PATCH 3/4] qcow2: Move sync out of qcow2_alloc_clusters Kevin Wolf
2010-09-17 16:18 ` [Qemu-devel] [PATCH 4/4] qcow2: Get rid of additional sync on COW Kevin Wolf
2010-09-17 17:05 ` [Qemu-devel] [PATCH 0/4] qcow2: Save another common flush Anthony Liguori
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=4C93A01F.40706@codemonkey.ws \
--to=anthony@codemonkey.ws \
--cc=kwolf@redhat.com \
--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.