qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] [PATCH 3/8] vmdk: clean up open


From: Kevin Wolf
Subject: Re: [Qemu-devel] [PATCH 3/8] vmdk: clean up open
Date: Thu, 20 Oct 2011 11:28:05 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:7.0) Gecko/20110927 Thunderbird/7.0

Am 19.10.2011 16:59, schrieb Paolo Bonzini:
> Signed-off-by: Paolo Bonzini <address@hidden>
> ---
>  block/vmdk.c |   37 +++++++++++++++----------------------
>  1 files changed, 15 insertions(+), 22 deletions(-)
> 
> diff --git a/block/vmdk.c b/block/vmdk.c
> index 21566eb..12b38d2 100644
> --- a/block/vmdk.c
> +++ b/block/vmdk.c
> @@ -622,20 +622,7 @@ static int vmdk_open_desc_file(BlockDriverState *bs, int 
> flags,
>          return -ENOTSUP;
>      }
>      s->desc_offset = 0;
> -    ret = vmdk_parse_extents(buf, bs, bs->file->filename);
> -    if (ret) {
> -        vmdk_free_extents(bs);
> -        return ret;
> -    }
> -
> -    /* try to open parent images, if exist */
> -    ret = vmdk_parent_open(bs);
> -    if (ret) {
> -        vmdk_free_extents(bs);
> -        return ret;
> -    }
> -    s->parent_cid = vmdk_read_cid(bs, 1);
> -    return 0;
> +    return vmdk_parse_extents(buf, bs, bs->file->filename);
>  }

This code is moved into bdrv_open, but there's another path how this
code can be reached:

vmdk_parse_extents() -> vmdk_open_sparse() -> vmdk_open_vmdk4() ->
vmdk_open_desc_file().

Don't we forget to open the parent file there now?

Kevin

>  
>  static int vmdk_open(BlockDriverState *bs, int flags)
> @@ -645,17 +632,23 @@ static int vmdk_open(BlockDriverState *bs, int flags)
>  
>      if (vmdk_open_sparse(bs, bs->file, flags) == 0) {
>          s->desc_offset = 0x200;
> -        /* try to open parent images, if exist */
> -        ret = vmdk_parent_open(bs);
> +    } else {
> +        ret = vmdk_open_desc_file(bs, flags, 0);
>          if (ret) {
> -            vmdk_free_extents(bs);
> -            return ret;
> +            goto fail;
>          }
> -        s->parent_cid = vmdk_read_cid(bs, 1);
> -        return 0;
> -    } else {
> -        return vmdk_open_desc_file(bs, flags, 0);
>      }
> +    /* try to open parent images, if exist */
> +    ret = vmdk_parent_open(bs);
> +    if (ret) {
> +        goto fail;
> +    }
> +    s->parent_cid = vmdk_read_cid(bs, 1);
> +    return ret;
> +
> +fail:
> +    vmdk_free_extents(bs);
> +    return ret;
>  }
>  
>  static int get_whole_cluster(BlockDriverState *bs,



reply via email to

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