On Mon 20 Nov 2017 09:09:44 PM CET, Max Reitz wrote:
> @@ -5016,6 +5016,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 */
> @@ -5027,11 +5028,20 @@ 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))
> + {
Does this mean that both file. and backing. have to be overriden?
Shouldn't that be a || instead of a && ??
> qdict_put_str(opts, "driver", drv->format_name);
> QINCREF(bs->file->bs->full_open_options);
> qdict_put(opts, "file", bs->file->bs->full_open_options);
>
> + if (bs->backing) {
> + QINCREF(bs->backing->bs->full_open_options);
> + qdict_put(opts, "backing",
> bs->backing->bs->full_open_options);
> + } else if (bs->backing_overridden && !bs->backing) {
> + qdict_put(opts, "backing", qstring_new());
> + }
You don't need the !bs->backing in the second if, it's implied from the
previous one.
Berto