qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH] block: Use BDRV_O_NO_BACKING where appropriate


From: Stefan Hajnoczi
Subject: Re: [Qemu-devel] [PATCH] block: Use BDRV_O_NO_BACKING where appropriate
Date: Thu, 24 Apr 2014 16:54:49 +0200
User-agent: Mutt/1.5.21 (2010-09-15)

On Fri, Apr 18, 2014 at 03:44:19PM +0200, BenoƮt Canet wrote:
> From: Kevin Wolf <address@hidden>
> 
> If you open an image temporarily just because you want to check its size
> or get it flushed, there's no real reason to open the whole backing file
> chain.
> 
> This is a backport of c9fbb99d41b05acf0d7b93deb2fcdbf9047c238e to
> qemu 1.7.1.
> 
> The backport was done to fix a bug where QEMU 1.7.1 would crash or freeze
> when the user take around 80 consecutives snapshots in a row.
> 
> git bisect would lead to commit: ba2ab2f2ca4150a7e314fbb19fa158bd8ddc36eb
> and it was clear that BDRV_NO_BACKING was missing.
> 
> Signed-off-by: Kevin Wolf <address@hidden>
> Signed-off-by: Benoit Canet <address@hidden>
> ---
>  block.c       |    4 ++--
>  block/qcow2.c |    3 ++-
>  block/vmdk.c  |    2 +-
>  3 files changed, 5 insertions(+), 4 deletions(-)

CCed address@hidden and Mike Roth, who maintains the stable tree.

This patch should go directly into stable through Mike.  It's already in
master so Kevin and I are not involved.

> diff --git a/block.c b/block.c
> index 382ea71..9f638ea 100644
> --- a/block.c
> +++ b/block.c
> @@ -1064,9 +1064,9 @@ int bdrv_open(BlockDriverState *bs, const char 
> *filename, QDict *options,
>          /* if snapshot, we create a temporary backing file and open it
>             instead of opening 'filename' directly */
>  
> -        /* if there is a backing file, use it */
>          bs1 = bdrv_new("");
> -        ret = bdrv_open(bs1, filename, NULL, 0, drv, &local_err);
> +        ret = bdrv_open(bs1, filename, NULL, BDRV_O_NO_BACKING, drv,
> +                        &local_err);
>          if (ret < 0) {
>              bdrv_unref(bs1);
>              goto fail;
> diff --git a/block/qcow2.c b/block/qcow2.c
> index 6e5d98d..344c63e 100644
> --- a/block/qcow2.c
> +++ b/block/qcow2.c
> @@ -1588,7 +1588,8 @@ static int qcow2_create2(const char *filename, int64_t 
> total_size,
>  
>      /* Reopen the image without BDRV_O_NO_FLUSH to flush it before returning 
> */
>      ret = bdrv_open(bs, filename, NULL,
> -                    BDRV_O_RDWR | BDRV_O_CACHE_WB, drv, &local_err);
> +                    BDRV_O_RDWR | BDRV_O_CACHE_WB | BDRV_O_NO_BACKING,
> +                    drv, &local_err);
>      if (error_is_set(&local_err)) {
>          error_propagate(errp, local_err);
>          goto out;
> diff --git a/block/vmdk.c b/block/vmdk.c
> index a7ebd0f..d35a9d7 100644
> --- a/block/vmdk.c
> +++ b/block/vmdk.c
> @@ -1689,7 +1689,7 @@ static int vmdk_create(const char *filename, 
> QEMUOptionParameter *options,
>      }
>      if (backing_file) {
>          BlockDriverState *bs = bdrv_new("");
> -        ret = bdrv_open(bs, backing_file, NULL, 0, NULL, errp);
> +        ret = bdrv_open(bs, backing_file, NULL, BDRV_O_NO_BACKING, NULL, 
> errp);
>          if (ret != 0) {
>              bdrv_unref(bs);
>              return ret;
> -- 
> 1.7.10.4
> 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]