[Top][All Lists]

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

[Qemu-block] block_status automatically added flags

From: Vladimir Sementsov-Ogievskiy
Subject: [Qemu-block] block_status automatically added flags
Date: Tue, 13 Feb 2018 20:36:41 +0300
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.6.0

Hi Eric!

I'm now testing my nbd block status realization (block_status part, not about dirty bitmaps), and faced into the following effect.

I created empty qcow2 image and wrote to the first sector, so

qemu-io -c map x


64 KiB (0x10000) bytes     allocated at offset 0 bytes (0x0)
9.938 MiB (0x9f0000) bytes not allocated at offset 64 KiB (0x10000)

But I can't get same results, when connecting to nbd server, exporting the same qcow2 file, I get

10 MiB (0xa00000) bytes     allocated at offset 0 bytes (0x0)

Finally, I understand the reason:

for local file, qemu-io calls bdrv_is_allocated, which calls bdrv_common_block_status_above with want_zero=false. So, it doesn't set BDRV_BLOCK_ZERO, and doesn't set BDRV_BLOCK_ALLOCATED. And, even if we change want_zero to true, here, it will set BDRV_BLOCK_ZERO, but will not set BDRV_BLOCK_ALLOCATED, which contradicts with it's definition:

 BDRV_BLOCK_ALLOCATED: the content of the block is determined by this
                       layer (short for DATA || ZERO), set by block layer

for nbd, we go through the similar way on server (but with want_zero = true), and we finally have BDRV_BLOCK_ZERO without BDRV_BLOCK_ALLOCATED, which maps to NBD_STATE_HOLE+NBD_STATE_ZERO. But then, in the client we have BDRV_BLOCK_ZERO not automatically added by block layer but directly from nbd driver, therefor BDRV_BLOCK_ALLOCATED is set and I get different result.

this all looks weird for me.

BDRV_BLOCK_ALLOCATED definition should be fixed, to show that this flag show only reported by driver flags, not automatically added.

And then the situation with nbd looks strange, because automatically added flag becomes "flag, reported by block driver".

On the other hand, it is not wrong.

I think, to test the feature, I'll improve qemu-io map, to show zeros (or is it better to add separate command?) and leave the other things as is. What do you think?

Best regards,

reply via email to

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