From 0a28bf2826ca027f0d993388f118b0bdbfca73a9 Mon Sep 17 00:00:00 2001 From: Max Reitz Date: Wed, 24 Jul 2019 19:12:35 +0200 Subject: [PATCH] vdi: Fix .bdrv_has_zero_init() Static VDI images cannot guarantee to be zero-initialized. If the image has been statically allocated, forward the call to the underlying storage node. Reported-by: Stefano Garzarella Signed-off-by: Max Reitz Reviewed-by: Stefan Weil Acked-by: Stefano Garzarella Tested-by: Stefano Garzarella Message-id: 20190724171239.8764-8-mreitz@redhat.com Reviewed-by: Maxim Levitsky Signed-off-by: Max Reitz --- block/vdi.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/block/vdi.c b/block/vdi.c index b9845a4cbded..0caa3f281d26 100644 --- a/block/vdi.c +++ b/block/vdi.c @@ -988,6 +988,17 @@ static void vdi_close(BlockDriverState *bs) error_free(s->migration_blocker); } +static int vdi_has_zero_init(BlockDriverState *bs) +{ + BDRVVdiState *s = bs->opaque; + + if (s->header.image_type == VDI_TYPE_STATIC) { + return bdrv_has_zero_init(bs->file->bs); + } else { + return 1; + } +} + static QemuOptsList vdi_create_opts = { .name = "vdi-create-opts", .head = QTAILQ_HEAD_INITIALIZER(vdi_create_opts.head), @@ -1028,7 +1039,7 @@ static BlockDriver bdrv_vdi = { .bdrv_child_perm = bdrv_format_default_perms, .bdrv_co_create = vdi_co_create, .bdrv_co_create_opts = vdi_co_create_opts, - .bdrv_has_zero_init = bdrv_has_zero_init_1, + .bdrv_has_zero_init = vdi_has_zero_init, .bdrv_co_block_status = vdi_co_block_status, .bdrv_make_empty = vdi_make_empty,