On Sun, May 10, 2026 at 07:50:55PM +0200, Sam Li wrote:
> This patch series add a new extension - zoned format - to the
> qcow2 driver thereby allowing full zoned storage emulation on
> the qcow2 img file. Users can attach such a qcow2 file to the
> guest as a zoned device.
>
> Write pointer are preserved in the zoned metadata. It will be
> recovered after power cycle. Meanwhile, any open (implicit or
> explicit) zone will show up as closed.
>
> Zone states are in memory. Read-only and offline states are
> device-internal events, which are not considerred in qcow2
> emulation for simplicity. The other zone states
> (closed, empty, full) can be inferred from write poiner
> values, presistent across QEMU reboots. The open states are
> kept in memory using open zone lists.
>
Hi Sam,
Thanks for picking up this work again!
> To create a qcow2 file with zoned format, use command like this:
A qemu-img create command-line is missing here in the cover letter.
>
> Then add it to the QEMU command line:
> -blockdev node-name=drive1,driver=qcow2,file.driver=file,file.filename=../qemu/test.qcow2 \
> -device virtio-blk-pci,drive=drive1 \
>
> v9->v10:
> - add cross-boundary constraint for merging writes on zoned devices
> - extract call from assert() to fix image creation crash
>
> v8->v9:
> - fix compilation err after modifying types
>
> v7->v8:
> - sets default values for zoned img confurations [Markus, Damien]
> - changes the type of zone_size, zone_capacity from uint32_t to uint64_t [Stefan]
> - fix docs [Stefan]
> - modify append writes to increase concurrency [Damien, Stefan]
> - use tailqueue to track active zones [Stefan]
> - fix undefined behavior of ranges_overlap()
> - fix the iotest of case 2(1)
>
> v6->v7:
> - modify zone resource managemant (style) [Damien]
> - fix accessing list with negative index err
> - add some tests for zrm in iotests
> - address review comments [Markus]
>
> v5->v6:
> - fix docs and specs [Eric, Markus, Stefan]
> - add general sanity checks for zoned device configurations while creation and opening [Eric]
> - fix LRU when implicitly open a zone for a long time [Stefan]
>
> v4->v5:
> - add incompatible bit for zoned format [Eric]
> - fix and manage zone resources via LRU [Damien]
> - renaming functions and fields, spec changes [Markus, Damien]
> - add closed zone list
> - make qemu iotests for zoned device consecutive [Stefan]
>
> v3->v4:
> - use QLIST for implicit, explicit open zones management [Stefan]
> - keep zone states in memory and drop state bits in wp metadata structure [Damien, Stefan]
> - change zone resource management and iotests accordingly
> - add tracing for number of implicit zones
> - address review comments [Stefan, Markus]:
> * documentation, config, style
>
> v2->v3:
> - drop zoned_profile option [Klaus]
> - reformat doc comments of qcow2 [Markus]
> - add input validation and checks for zoned information [Stefan]
> - code style: format, comments, documentation, naming [Stefan]
> - add tracing function for wp tracking [Stefan]
> - reconstruct io path in check_zone_resources [Stefan]
>
> v1->v2:
> - add more tests to qemu-io zoned commands
> - make zone append change state to full when wp reaches end
> - add documentation to qcow2 zoned extension header
> - address review comments (Stefan):
> * fix zoned_mata allocation size
> * use bitwise or than addition
> * fix wp index overflow and locking
> * cleanups: comments, naming
>
> Sam Li (4):
> docs/qcow2: add the zoned format feature
> qcow2: add configurations for zoned format extension
> qcow2: add zoned emulation capability
> iotests: test the zoned format feature for qcow2 file
>
> block/file-posix.c | 2 +-
> block/qcow2.c | 1113 +++++++++++++++++++++-
> block/qcow2.h | 39 +-
> block/trace-events | 2 +
> docs/interop/qcow2.rst | 110 ++-
> docs/system/qemu-block-drivers.rst.inc | 42 +
> hw/block/virtio-blk.c | 22 +-
> include/block/block_int-common.h | 15 +-
> include/qemu/queue.h | 1 +
> include/qemu/range.h | 4 +
> qapi/block-core.json | 70 +-
> tests/qemu-iotests/tests/zoned-qcow2 | 150 +++
> tests/qemu-iotests/tests/zoned-qcow2.out | 173 ++++
> 13 files changed, 1730 insertions(+), 13 deletions(-)
> create mode 100755 tests/qemu-iotests/tests/zoned-qcow2
> create mode 100644 tests/qemu-iotests/tests/zoned-qcow2.out
>
> --
> 2.43.0
>