[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));