The COR-filter driver should support a redirecting function to refresh filenames. Otherwise, a file name of the filter will be copied instead of the one of a data node. It is also true for the function bdrv_change_backing_file().
Signed-off-by: Andrey Shinkevich <andrey.shinkev...@virtuozzo.com> --- block/copy-on-read.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/block/copy-on-read.c b/block/copy-on-read.c index c4fa468..74e01ee 100644 --- a/block/copy-on-read.c +++ b/block/copy-on-read.c @@ -21,6 +21,7 @@ */ #include "qemu/osdep.h" +#include "qemu/cutils.h" #include "block/block_int.h" #include "qemu/module.h" @@ -128,6 +129,21 @@ static void cor_lock_medium(BlockDriverState *bs, bool locked) } +static void cor_refresh_filename(BlockDriverState *bs) +{ + pstrcpy(bs->exact_filename, sizeof(bs->exact_filename), + bs->file->bs->filename); +} + + +static int cor_change_backing_file(BlockDriverState *bs, + const char *backing_file, + const char *backing_fmt) +{ + return bdrv_change_backing_file(bs->file->bs, backing_file, backing_fmt); +} + + static BlockDriver bdrv_copy_on_read = { .format_name = "copy-on-read", @@ -146,6 +162,8 @@ static BlockDriver bdrv_copy_on_read = { .bdrv_lock_medium = cor_lock_medium, .bdrv_co_block_status = bdrv_co_block_status_from_file, + .bdrv_refresh_filename = cor_refresh_filename, + .bdrv_change_backing_file = cor_change_backing_file, .has_variable_length = true, .is_filter = true, -- 1.8.3.1