All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Benoît Canet" <benoit.canet@irqsave.net>
To: Kevin Wolf <kwolf@redhat.com>
Cc: qemu-devel@nongnu.org, stefanha@redhat.com, quintela@redhat.com
Subject: Re: [Qemu-devel] [PATCH] block: Update image size in bdrv_invalidate_cache()
Date: Tue, 11 Mar 2014 17:41:45 +0100	[thread overview]
Message-ID: <20140311164145.GC3276@irqsave.net> (raw)
In-Reply-To: <1394531919-14346-1-git-send-email-kwolf@redhat.com>

The Tuesday 11 Mar 2014 à 10:58:39 (+0100), Kevin Wolf wrote :
> After migration has completed, we call bdrv_invalidate_cache() so that
> drivers which cache some data drop their stale copy of the data and
> reread it from the image file to get a new version of data that the
> source modified while the migration was running.
> 
> Reloading metadata from the image file is useless, though, if the size
> of the image file stays stale (this is a value that is cached for all
> image formats in block.c). Reads from (meta)data after the old EOF
> return only zeroes, causing image corruption.
> 
> We need to update bs->total_sectors in all layers that could potentially
> have changed their size (i.e. backing files are not a concern - if they
> are changed, we're in bigger trouble)
> 
> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
> ---
>  block.c       | 10 +++++++++-
>  block/qcow2.c |  2 ++
>  block/qed.c   |  3 +++
>  3 files changed, 14 insertions(+), 1 deletion(-)
> 
> diff --git a/block.c b/block.c
> index f1ef4b0..7b306fb 100644
> --- a/block.c
> +++ b/block.c
> @@ -4776,9 +4776,17 @@ flush_parent:
>  
>  void bdrv_invalidate_cache(BlockDriverState *bs)
>  {
> -    if (bs->drv && bs->drv->bdrv_invalidate_cache) {
> +    if (!bs->drv)  {
> +        return;
> +    }
> +
> +    if (bs->drv->bdrv_invalidate_cache) {
>          bs->drv->bdrv_invalidate_cache(bs);
> +    } else if (bs->file) {
> +        bdrv_invalidate_cache(bs->file);
>      }
> +
> +    refresh_total_sectors(bs, bs->total_sectors);
>  }
>  
>  void bdrv_invalidate_cache_all(void)
> diff --git a/block/qcow2.c b/block/qcow2.c
> index cfe80be..b5b1e8c 100644
> --- a/block/qcow2.c
> +++ b/block/qcow2.c
> @@ -1176,6 +1176,8 @@ static void qcow2_invalidate_cache(BlockDriverState *bs)
>  
>      qcow2_close(bs);
>  
> +    bdrv_invalidate_cache(bs->file);
> +
>      options = qdict_new();
>      qdict_put(options, QCOW2_OPT_LAZY_REFCOUNTS,
>                qbool_from_int(s->use_lazy_refcounts));
> diff --git a/block/qed.c b/block/qed.c
> index 8802ad3..837accd 100644
> --- a/block/qed.c
> +++ b/block/qed.c
> @@ -1563,6 +1563,9 @@ static void bdrv_qed_invalidate_cache(BlockDriverState *bs)
>      BDRVQEDState *s = bs->opaque;
>  
>      bdrv_qed_close(bs);
> +
> +    bdrv_invalidate_cache(bs->file);
> +
>      memset(s, 0, sizeof(BDRVQEDState));
>      bdrv_qed_open(bs, NULL, bs->open_flags, NULL);
>  }
> -- 
> 1.8.1.4
> 
> 

I have the impression that you are silently fixing other nits;

However:

Reviewed-by: Benoit Canet <benoit@irqsave.net>

  parent reply	other threads:[~2014-03-11 16:41 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-03-11  9:58 [Qemu-devel] [PATCH] block: Update image size in bdrv_invalidate_cache() Kevin Wolf
2014-03-11 11:36 ` Juan Quintela
2014-03-11 12:47 ` Stefan Hajnoczi
2014-03-11 16:41 ` Benoît Canet [this message]
2014-03-12  9:40   ` Kevin Wolf
2014-03-12  9:43     ` Benoît Canet

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=20140311164145.GC3276@irqsave.net \
    --to=benoit.canet@irqsave.net \
    --cc=kwolf@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=quintela@redhat.com \
    --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 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.