qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH] vhdx: Return true for bdrv_has_zero_init


From: Max Reitz
Subject: Re: [Qemu-devel] [PATCH] vhdx: Return true for bdrv_has_zero_init
Date: Fri, 05 Dec 2014 12:06:23 +0100
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.2.0

On 2014-12-05 at 11:26, Kevin Wolf wrote:
Like for most other image formats, vhdx images read as all zero in qemu
after their creation (we're taking advantage from the fact that qemu has
just created the image, because PAYLOAD_BLOCK_NOT_PRESENT actually means
undefined rather than zeroed according to the spec).

I think whether qemu created the image doesn't matter. If it's undefined, it's completely valid for qemu to interpret it as zeroed.

So, as we discussed, the problem comes in when another program opens the image and actually interprets the data as something else than zero, which will be an issue if we used convert which then will have converted zeros from the input to basically random data (for qcow2 it will be zero again, but for other programs it might not be).

We could make block_state_zero=on non-optional, but that would mean we always would have to write the full BAT. Not so nice either. So what could probably solve the problem is a BDS-specific has_zero_init, which would be equal to the block_state_zero value here. But I'm not sure whether we want that either.

Max

This fixes that 'qemu-img convert' to vhdx fully populates the image.

Signed-off-by: Kevin Wolf <address@hidden>
---
  block/vhdx.c | 1 +
  1 file changed, 1 insertion(+)

diff --git a/block/vhdx.c b/block/vhdx.c
index 12bfe75..8a54da0 100644
--- a/block/vhdx.c
+++ b/block/vhdx.c
@@ -1951,6 +1951,7 @@ static BlockDriver bdrv_vhdx = {
      .bdrv_co_readv          = vhdx_co_readv,
      .bdrv_co_writev         = vhdx_co_writev,
      .bdrv_create            = vhdx_create,
+    .bdrv_has_zero_init     = bdrv_has_zero_init_1,
      .bdrv_get_info          = vhdx_get_info,
      .bdrv_check             = vhdx_check,



reply via email to

[Prev in Thread] Current Thread [Next in Thread]