On 05/08/2015 11:21 AM, Kevin Wolf wrote: > For bs->file, using references to existing BDSes has been possible for a > while already. This patch enables the same for bs->backing_hd. > > Signed-off-by: Kevin Wolf <[email protected]> > --- > block.c | 42 ++++++++++++++++++++++++------------------ > block/mirror.c | 2 +- > include/block/block.h | 3 ++- > 3 files changed, 27 insertions(+), 20 deletions(-) > > diff --git a/block.c b/block.c > index e93bf63..95dc51e 100644 > --- a/block.c > +++ b/block.c > @@ -1109,30 +1109,41 @@ out: > /* > * Opens the backing file for a BlockDriverState if not yet open > * > - * options is a QDict of options to pass to the block drivers, or NULL for an > - * empty set of options. The reference to the QDict is transferred to this > - * function (even on failure), so if the caller intends to reuse the > dictionary, > - * it needs to use QINCREF() before calling bdrv_file_open. > + * bdrev_key specifies the key for the image's BlockdevRef in the options > QDict.
s/bdrev/bdref/
> + * That QDict has to be flattened; therefore, if the BlockdevRef is a QDict
> + * itself, all options starting with "${bdref_key}." are considered part of
> the
> + * BlockdevRef.
> + *
>
> bs->open_flags &= ~BDRV_O_NO_BACKING;
> - if (qdict_haskey(options, "file.filename")) {
> +
> + bdref_key_dot = g_strdup_printf("%s.", bdref_key);
> + qdict_extract_subqdict(parent_options, &options, bdref_key_dot);
> + g_free(bdref_key_dot);
I wonder if we have a pattern like this frequently enough to make a
wrapper that concatenates the argument for us, instead of having every
caller have to form a temporary concatenation string. But not something
that affects this patch.
--
Eric Blake eblake redhat com +1-919-301-3266
Libvirt virtualization library http://libvirt.org
signature.asc
Description: OpenPGP digital signature
