summary refs log tree commit diff stats
path: root/hw/core/qdev-clock.c
diff options
context:
space:
mode:
authorNir Soffer <nirsof@gmail.com>2021-02-19 18:07:52 +0200
committerEric Blake <eblake@redhat.com>2021-03-08 13:08:45 -0600
commit0da9856851dcca09222a1467e16ddd05dc66e460 (patch)
tree5f67be723ef2e26ce4d56dcd4b1a55b056027933 /hw/core/qdev-clock.c
parent3d9330ece5c5cb7b5e8fec1bef4da8fe78134fc2 (diff)
downloadfocaccia-qemu-0da9856851dcca09222a1467e16ddd05dc66e460.tar.gz
focaccia-qemu-0da9856851dcca09222a1467e16ddd05dc66e460.zip
nbd: server: Report holes for raw images
When querying image extents for raw image, qemu-nbd reports holes as
zero:

$ qemu-nbd -t -r -f raw empty-6g.raw

$ qemu-img map --output json nbd://localhost
[{ "start": 0, "length": 6442450944, "depth": 0, "zero": true, "data": true, "offset": 0}]

$ qemu-img map --output json empty-6g.raw
[{ "start": 0, "length": 6442450944, "depth": 0, "zero": true, "data": false, "offset": 0}]

Turns out that qemu-img map reports a hole based on BDRV_BLOCK_DATA, but
nbd server reports a hole based on BDRV_BLOCK_ALLOCATED.

The NBD protocol says:

    NBD_STATE_HOLE (bit 0): if set, the block represents a hole (and
    future writes to that area may cause fragmentation or encounter an
    NBD_ENOSPC error); if clear, the block is allocated or the server
    could not otherwise determine its status.

qemu-img manual says:

    whether the sectors contain actual data or not (boolean field data;
    if false, the sectors are either unallocated or stored as
    optimized all-zero clusters);

To me, data=false looks compatible with NBD_STATE_HOLE. From user point
of view, getting same results from qemu-nbd and qemu-img is more
important than being more correct about allocation status.

Changing nbd server to report holes using BDRV_BLOCK_DATA makes qemu-nbd
results compatible with qemu-img map:

$ qemu-img map --output json nbd://localhost
[{ "start": 0, "length": 6442450944, "depth": 0, "zero": true, "data": false, "offset": 0}]

Signed-off-by: Nir Soffer <nsoffer@redhat.com>
Message-Id: <20210219160752.1826830-1-nsoffer@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
Signed-off-by: Eric Blake <eblake@redhat.com>
Diffstat (limited to 'hw/core/qdev-clock.c')
0 files changed, 0 insertions, 0 deletions