On 10/09/2012 11:56 PM, Jeff Cody wrote: > This simplifies some code and error checking, and also fixes a bug. > > bdrv_find_backing_image() should only be passed absolute filenames, > or filenames relative to the chain. In the QMP message handler for > block commit, when looking up the base do so from the determined top > image, so we know it is reachable from top. > > Signed-off-by: Jeff Cody <jc...@redhat.com> > --- > block/commit.c | 9 --------- > blockdev.c | 21 +++++++++++---------- > 2 files changed, 11 insertions(+), 19 deletions(-) >
> @@ -1182,6 +1172,17 @@ void qmp_block_commit(const char *device, > return; > } > > + if (base && has_base) { > + base_bs = bdrv_find_backing_image(top_bs, base); In particular, if I have the chain: /dir1/base <- /dir1/snap1(base) <- /dir2/base(/dir1/snap1) <- /dir2/snap2(base) and request a commit of "top":"/dir1/snap1", "base":"base", then this new code will now look up base relative to /dir1/snap1 and find /dir1/base and proceed with the commit; whereas the old code would look up base relative to /dir2/snap2 and find /dir2/base and complain that the arguments were swapped. I can live with those semantics. Reviewed-by: Eric Blake <ebl...@redhat.com> -- Eric Blake ebl...@redhat.com +1-919-301-3266 Libvirt virtualization library http://libvirt.org
signature.asc
Description: OpenPGP digital signature