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