On Mon, 11/24 10:43, Max Reitz wrote: > Relative backing filenames are always relative to the backed image's > directory; the same applies to image creation. Therefore, if the backing > file has to be opened for determining its size (in case the size has not > been explicitly specified) its filename should be interpreted relative > to the new image's base directory and not relative to qemu's working > directory. > > Signed-off-by: Max Reitz <mre...@redhat.com> > --- > block.c | 12 +++++++++++- > 1 file changed, 11 insertions(+), 1 deletion(-) > > diff --git a/block.c b/block.c > index a0cddcd..ed8e187 100644 > --- a/block.c > +++ b/block.c > @@ -5633,16 +5633,26 @@ void bdrv_img_create(const char *filename, const char > *fmt, > if (size == -1) { > if (backing_file) { > BlockDriverState *bs; > + char *full_backing = g_new0(char, PATH_MAX); > int64_t size; > int back_flags; > > + bdrv_get_full_backing_filename_from_filename(filename, > backing_file, > + full_backing, > PATH_MAX, > + &local_err); > + if (local_err) { > + g_free(full_backing); > + goto out; > + } > + > /* backing files always opened read-only */ > back_flags = > flags & ~(BDRV_O_RDWR | BDRV_O_SNAPSHOT | BDRV_O_NO_BACKING); > > bs = NULL; > - ret = bdrv_open(&bs, backing_file, NULL, NULL, back_flags, > + ret = bdrv_open(&bs, full_backing, NULL, NULL, back_flags, > backing_drv, &local_err); > + g_free(full_backing); > if (ret < 0) { > goto out; > } > -- > 1.9.3 > >
Reviewed-by: Fam Zheng <f...@redhat.com>