Commit 72c6cc94 authored by Kevin Wolf's avatar Kevin Wolf
Browse files

vpc: Implement .bdrv_has_zero_init



Depending on the subformat, has_zero_init on VHD must behave like raw
and query the underlying storage (fixed) or like other sparse formats
that can always return 1 (dynamic, differencing).

Signed-off-by: default avatarKevin Wolf <kwolf@redhat.com>
parent 8ed610a1
Loading
Loading
Loading
Loading
+19 −6
Original line number Diff line number Diff line
@@ -786,6 +786,18 @@ static int vpc_create(const char *filename, QEMUOptionParameter *options)
    return ret;
}

static int vpc_has_zero_init(BlockDriverState *bs)
{
    BDRVVPCState *s = bs->opaque;
    struct vhd_footer *footer =  (struct vhd_footer *) s->footer_buf;

    if (cpu_to_be32(footer->type) == VHD_FIXED) {
        return bdrv_has_zero_init(bs->file);
    } else {
        return 1;
    }
}

static void vpc_close(BlockDriverState *bs)
{
    BDRVVPCState *s = bs->opaque;
@@ -828,6 +840,7 @@ static BlockDriver bdrv_vpc = {
    .bdrv_write             = vpc_co_write,

    .create_options         = vpc_create_options,
    .bdrv_has_zero_init     = vpc_has_zero_init,
};

static void bdrv_vpc_init(void)