Backing filenames may contain a protocol. The code currently doesn't consider this case and produces filenames that embed "<protocol>:". Don't combine filenames if the backing filename contains a protocol.
Based on an earlier patch by Anthony Liguori <[email protected]>. Signed-off-by: Stefan Hajnoczi <[email protected]> --- block.c | 15 +++++++++++---- 1 files changed, 11 insertions(+), 4 deletions(-) diff --git a/block.c b/block.c index 59b69e4..c9a6720 100644 --- a/block.c +++ b/block.c @@ -611,10 +611,17 @@ 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); + if (path_has_protocol(bs->backing_file)) { + back_drv = bdrv_find_protocol(bs->backing_file); + pstrcpy(backing_filename, sizeof(backing_filename), + bs->backing_file); + } else { + 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); + } + } /* backing files always opened read-only */ back_flags = -- 1.7.2.3
