qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] [PATCH 03/19] block: Respect backing bs in bdrv_refresh


From: Kevin Wolf
Subject: Re: [Qemu-devel] [PATCH 03/19] block: Respect backing bs in bdrv_refresh_filename
Date: Mon, 2 May 2016 17:36:03 +0200
User-agent: Mutt/1.5.21 (2010-09-15)

Am 26.04.2016 um 23:32 hat Max Reitz geschrieben:
> Basically, bdrv_refresh_filename() should respect all children of a
> BlockDriverState. However, generally those children are driver-specific,
> so this function cannot handle the general case. On the other hand,
> there are only few drivers which use other children than @file and
> @backing (that being vmdk, quorum, and blkverify).
> 
> Most block drivers only use @file and/or @backing (if they use any
> children at all). Both can be implemented directly in
> bdrv_refresh_filename.
> 
> The user overriding the file's filename is already handled, however, the
> user overriding the backing file is not. If this is done, opening the
> BDS with the plain filename of its file will not be correct, so we may
> not set bs->exact_filename in that case.
> 
> iotest 051 contains test cases for overwriting the backing file, and so
> its output changes with this patch applied (which I consider a good
> thing).
> 
> Signed-off-by: Max Reitz <address@hidden>
> ---
>  block.c                       | 14 +++++++++++++-
>  tests/qemu-iotests/051.out    |  8 ++++----
>  tests/qemu-iotests/051.pc.out |  8 ++++----
>  3 files changed, 21 insertions(+), 9 deletions(-)
> 
> diff --git a/block.c b/block.c
> index e178488..aff9ea3 100644
> --- a/block.c
> +++ b/block.c
> @@ -3925,6 +3925,7 @@ void bdrv_refresh_filename(BlockDriverState *bs)
>  
>          opts = qdict_new();
>          has_open_options = append_open_options(opts, bs);
> +        has_open_options |= bs->backing_overridden;
>  
>          /* If no specific options have been given for this BDS, the filename 
> of
>           * the underlying file should suffice for this one as well */
> @@ -3936,13 +3937,24 @@ void bdrv_refresh_filename(BlockDriverState *bs)
>           * file BDS. The full options QDict of that file BDS should somehow
>           * contain a representation of the filename, therefore the following
>           * suffices without querying the (exact_)filename of this BDS. */
> -        if (bs->file->bs->full_open_options) {
> +        if (bs->file->bs->full_open_options &&
> +            (!bs->backing || bs->backing->bs->full_open_options))
> +        {
>              qdict_put_obj(opts, "driver",
>                            QOBJECT(qstring_from_str(drv->format_name)));
> +
>              QINCREF(bs->file->bs->full_open_options);
>              qdict_put_obj(opts, "file",
>                            QOBJECT(bs->file->bs->full_open_options));
>  
> +            if (bs->backing) {
> +                QINCREF(bs->backing->bs->full_open_options);
> +                qdict_put_obj(opts, "backing",
> +                              QOBJECT(bs->backing->bs->full_open_options));
> +            } else if (bs->backing_overridden && !bs->backing) {
> +                qdict_put_obj(opts, "backing", QOBJECT(qstring_new()));
> +            }

I see that the surrounding code does the same, but what's wrong with
qdict_put()?

Kevin



reply via email to

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