From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:42846) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1V7RgI-0000oW-Gf for qemu-devel@nongnu.org; Thu, 08 Aug 2013 10:59:23 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1V7Rg9-00018n-HK for qemu-devel@nongnu.org; Thu, 08 Aug 2013 10:59:14 -0400 Received: from e23smtp05.au.ibm.com ([202.81.31.147]:52702) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1V7Rg8-00018M-UP for qemu-devel@nongnu.org; Thu, 08 Aug 2013 10:59:05 -0400 Received: from /spool/local by e23smtp05.au.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Fri, 9 Aug 2013 00:51:49 +1000 Received: from d23relay05.au.ibm.com (d23relay05.au.ibm.com [9.190.235.152]) by d23dlp01.au.ibm.com (Postfix) with ESMTP id 890BE2CE804C for ; Fri, 9 Aug 2013 00:58:43 +1000 (EST) Received: from d23av01.au.ibm.com (d23av01.au.ibm.com [9.190.234.96]) by d23relay05.au.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id r78Egp1M5177618 for ; Fri, 9 Aug 2013 00:42:52 +1000 Received: from d23av01.au.ibm.com (localhost [127.0.0.1]) by d23av01.au.ibm.com (8.14.4/8.14.4/NCO v10.0 AVout) with ESMTP id r78EwgAf012368 for ; Fri, 9 Aug 2013 00:58:42 +1000 Message-ID: <5203B21F.60307@linux.vnet.ibm.com> Date: Thu, 08 Aug 2013 22:58:39 +0800 From: Mike Qiu MIME-Version: 1.0 References: <1375973116-8458-1-git-send-email-qiudayu@linux.vnet.ibm.com> In-Reply-To: <1375973116-8458-1-git-send-email-qiudayu@linux.vnet.ibm.com> Content-Type: text/plain; charset=GB2312 Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH] block: Bugfix 'format' and 'snapshot' used in drive option List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Mike Qiu Cc: kwolf@redhat.com, qemu-devel@nongnu.org, stefanha@redhat.com 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 > --- > 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));