From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from [140.186.70.92] (port=38010 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1PBP6n-0005om-Oj for qemu-devel@nongnu.org; Thu, 28 Oct 2010 05:49:23 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1PBP6k-00006j-Ov for qemu-devel@nongnu.org; Thu, 28 Oct 2010 05:49:21 -0400 Received: from mx1.redhat.com ([209.132.183.28]:11442) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1PBP6k-00006F-IX for qemu-devel@nongnu.org; Thu, 28 Oct 2010 05:49:18 -0400 Message-ID: <4CC94746.1040601@redhat.com> Date: Thu, 28 Oct 2010 11:49:58 +0200 From: Kevin Wolf MIME-Version: 1.0 Subject: Re: [Qemu-devel] [PATCH] block: fix the use of protocols in backing files References: <1288203550-23698-1-git-send-email-aliguori@us.ibm.com> <20101028093502.GC11647@redhat.com> In-Reply-To: <20101028093502.GC11647@redhat.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: "Daniel P. Berrange" Cc: Stefan Hajnoczi , Anthony Liguori , qemu-devel@nongnu.org, Stefan Hajnoczi , Adam Litke Am 28.10.2010 11:35, schrieb Daniel P. Berrange: > On Thu, Oct 28, 2010 at 09:30:09AM +0100, Stefan Hajnoczi wrote: >> On Wed, Oct 27, 2010 at 7:19 PM, Anthony Liguori wrote: >>> Signed-off-by: Anthony Liguori >>> >>> diff --git a/block.c b/block.c >>> index 1a965b2..00b6f21 100644 >>> --- a/block.c >>> +++ b/block.c >>> @@ -603,10 +603,16 @@ int bdrv_open(BlockDriverState *bs, const char *filename, int flags, >>> BlockDriver *back_drv = NULL; >>> >>> bs->backing_hd = bdrv_new(""); >>> - path_combine(backing_filename, sizeof(backing_filename), >>> - filename, bs->backing_file); >>> - if (bs->backing_format[0] != '\0') >>> - back_drv = bdrv_find_format(bs->backing_format); >>> + back_drv = bdrv_find_protocol(bs->backing_file); >>> + if (!back_drv) { >>> + path_combine(backing_filename, sizeof(backing_filename), >>> + filename, bs->backing_file); >>> + if (bs->backing_format[0] != '\0') >>> + back_drv = bdrv_find_format(bs->backing_format); >>> + } else { >>> + pstrcpy(backing_filename, sizeof(backing_filename), >>> + bs->backing_file); >>> + } >>> >>> /* backing files always opened read-only */ >>> back_flags = >>> -- >>> 1.7.0.4 >> >> I think this makes sense. >> >> Now it is possible to specify backing files that are relative to >> QEMU's current working directory using file:filename. I don't see >> harm in this. > > Shouldn't a backing file be treated as relative to the image file pointing > to it, rather than the QEMU working directory. eg so you can do > > # qemu-img create backing.img > # qemu-img create -o backing_file=file:backing.img main.img > > And have main.img be able to resolve backing.img in its same directory, > no matter what directory QEMU itself is executing from The problem is that this wouldn't work in the general case. It's rather an exception that it makes sense for file: backing files with file: images. Consider this: # qemu-img create -o backing_file=nbd:foo:1234 /tmp/main.img Without this patch, you'll end up with /tmp/nbd:foo:1234, which is probably not what you wanted. With a patch that would work for file: you would get a hardly better path nbd:/tmp/foo:1234 Kevin