qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] [PATCH] block: Bugfix 'format' and 'snapshot' used in d


From: Mike Qiu
Subject: Re: [Qemu-devel] [PATCH] block: Bugfix 'format' and 'snapshot' used in drive option
Date: Thu, 08 Aug 2013 22:58:39 +0800
User-agent: Mozilla/5.0 (Windows NT 6.2; WOW64; rv:17.0) Gecko/20130801 Thunderbird/17.0.8

Hi all

This 'bug' also happens use -snapshot,

But as newer to qemu,
I'm not sure about what am I understanding.

But I think snapshot should works at least in qcow2.

My understanding about the driver option is mainly for
'nbd' and 'http/https/ftp', and so in commit:
c2ad1b0c465a9ea8375eaff14bbd85705c673f73
So when 'driver' option used, the snapshot can't
be using.

As this understanding, my first patch is try to
get the the value of key==driver, and if the
value in 'nbd' and 'http/https/ftp', then
give out that error messages.

So give me some comments and sugguestions, pls.

Thanks
Mike

2013/8/8 22:45, Mike Qiu wrote:
> When use -drive file='xxx',format=qcow2,snapshot=on the error
> message "Can't use snapshot=on with driver-specific options"
> can be show, and fail to start the qemu.
>
> This should not be happened, and there is no file.driver option
> in qemu command line.
>
> It is because the commit 74fe54f2a1b5c4f4498a8fe521e1dfc936656cd4,
> it puts 'driver' option if the command line use 'format' option.
>
> This patch is to solve this bug.
>
> Signed-off-by: Mike Qiu <address@hidden>
> ---
>  blockdev.c | 12 +++++++++---
>  1 file changed, 9 insertions(+), 3 deletions(-)
>
> diff --git a/blockdev.c b/blockdev.c
> index 41b0a49..e174b7d 100644
> --- a/blockdev.c
> +++ b/blockdev.c
> @@ -340,6 +340,7 @@ static DriveInfo *blockdev_init(QemuOpts *all_opts,
>      QDict *bs_opts;
>      const char *id;
>      bool has_driver_specific_opts;
> +    BlockDriver *drv = NULL;
>
>      translation = BIOS_ATA_TRANSLATION_AUTO;
>      media = MEDIA_DISK;
> @@ -485,7 +486,11 @@ static DriveInfo *blockdev_init(QemuOpts *all_opts,
>              return NULL;
>          }
>
> -        qdict_put(bs_opts, "driver", qstring_from_str(buf));
> +        drv = bdrv_find_whitelisted_format(buf, ro);
> +        if (!drv) {
> +            error_report("'%s' invalid format", buf);
> +            return NULL;
> +        }
>      }
>
>      /* disk I/O throttling */
> @@ -700,12 +705,13 @@ static DriveInfo *blockdev_init(QemuOpts *all_opts,
>      }
>
>      QINCREF(bs_opts);
> -    ret = bdrv_open(dinfo->bdrv, file, bs_opts, bdrv_flags, NULL);
> +    ret = bdrv_open(dinfo->bdrv, file, bs_opts, bdrv_flags, drv);
>
>      if (ret < 0) {
>          if (ret == -EMEDIUMTYPE) {
>              error_report("could not open disk image %s: not in %s format",
> -                         file ?: dinfo->id, qdict_get_str(bs_opts, 
> "driver"));
> +                         file ?: dinfo->id, drv ? drv->format_name :
> +                         qdict_get_str(bs_opts, "driver"));
>          } else {
>              error_report("could not open disk image %s: %s",
>                           file ?: dinfo->id, strerror(-ret));




reply via email to

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