qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] [PATCH v13 07/14] block: Parse "backing" option to refe


From: Benoît Canet
Subject: Re: [Qemu-devel] [PATCH v13 07/14] block: Parse "backing" option to reference existing BDS
Date: Thu, 13 Feb 2014 14:17:53 +0100
User-agent: Mutt/1.5.21 (2010-09-15)

The Wednesday 29 Jan 2014 à 13:07:34 (+0800), Fam Zheng wrote :
> Now it's safe to allow reference for backing_hd in the interface.
> 
> Signed-off-by: Fam Zheng <address@hidden>
> ---
>  block.c | 26 ++++++++++++++++++++++++--
>  1 file changed, 24 insertions(+), 2 deletions(-)
> 
> diff --git a/block.c b/block.c
> index 4e3b393..9d57223 100644
> --- a/block.c
> +++ b/block.c
> @@ -1392,12 +1392,34 @@ int bdrv_open(BlockDriverState *bs, const char 
> *filename, QDict *options,
>      /* If there is a backing file, use it */
>      if ((flags & BDRV_O_NO_BACKING) == 0) {
>          QDict *backing_options;
> +        const char *backing_name;
> +        BlockDriverState *backing_hd;
>  
> +        backing_name = qdict_get_try_str(options, "backing");
>          qdict_extract_subqdict(options, &backing_options, "backing.");
> -        ret = bdrv_open_backing_file(bs, backing_options, &local_err);
> -        if (ret < 0) {
> +
> +        if (backing_name && qdict_size(backing_options)) {
> +            error_setg(&local_err,
> +                       "Option \"backing\" and \"backing.*\" cannot be "
> +                       "used together");
> +            ret = -EINVAL;
>              goto close_and_fail;
>          }
> +        if (backing_name) {
> +            backing_hd = bdrv_find(backing_name);

Is backing_name a reference ?
If so it would be nice if backing_name could refer to a bs by id or
or an element of the graph by node-name.

I posted a series which relax bdrv_lookup_bs rules to do so.

Maybe this could be done after merge in another patch.

> +            if (!backing_hd) {
> +                error_set(&local_err, QERR_DEVICE_NOT_FOUND, backing_name);
> +                ret = -ENOENT;
> +                goto close_and_fail;
> +            }
> +            qdict_del(options, "backing");
> +            bdrv_set_backing_hd(bs, backing_hd);
> +        } else {
> +            ret = bdrv_open_backing_file(bs, backing_options, &local_err);
> +            if (ret < 0) {
> +                goto close_and_fail;
> +            }
> +        }
>      }
>  
>      /* Check if any unknown options were used */
> -- 
> 1.8.5.3
> 
> 



reply via email to

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