On Thu, Oct 28, 2010 at 11:49:58AM +0200, Kevin Wolf wrote: > 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 <aligu...@us.ibm.com> > >> wrote: > >>> Signed-off-by: Anthony Liguori <aligu...@us.ibm.com> > >>> > >>> 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
Since we know the protocol, there could be a per-protocol function used for resolving the backing store URI relative to the master URI. That would avoid needing to special case file: in the shared generic code. Daniel -- |: Red Hat, Engineering, London -o- http://people.redhat.com/berrange/ :| |: http://libvirt.org -o- http://virt-manager.org -o- http://deltacloud.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: GnuPG: 7D3B9505 -o- F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|