Hi Niklas, On Fri, Jun 26, 2026 at 1:33 PM Niklas Cassel <[email protected]> wrote: > > Hello Sam, > > Again, thank you so much for spending your spare time on this! > > On Tue, Jun 23, 2026 at 08:48:25PM +0200, Sam Li wrote: > > This patch series add a new extension - zoned format - to the > > qcow2 driver, allowing full zoned storage emulation on a qcow2 > > image file. A user can attach such an image to a guest and have > > it appear as a host-managed zoned block device. > > > > The zoned format is opt-in through a new qcow2 header extension > > that pins the zone geometry. Behind the extension is a dedicated > > zoned metadata region that stores one 8-byte write pointer (WP) > > per zone. The extension is gated by an incompatible bit, so an > > older qcow2 implementation cannot accidentally open the image. > > > > Each write pointer is routed through the write pointer cache, > > a Qcow2Cache object. The write pointer cache is written to disk > > after the qcow2 metadata is written, thus guaranteeing that > > the write pointer is updated after the corresponding data is > > written. > > > > Zone states are in memory. Read-only and offline states are > > device-internal events, which are not modelled 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. > > > > To create a qcow2 file with the zoned format: > > > > qemu-img create -f qcow2 zbc.qcow2 \ > > -o size=768M \ > > -o zone.size=64M \ > > -o zone.capacity=64M \ > > -o zone.conventional_zones=0 \ > > -o zone.max_append_bytes=4096 \ > > -o zone.max_open_zones=6 \ > > -o zone.max_active_zones=8 \ > > -o zone.mode=host-managed > > > > Then attach it to a guest via the QEMU command line: > > -blockdev node-name=drive1,driver=qcow2,\ > > file.driver=file,file.filename=zbc.qcow2 \ > > -device virtio-blk-pci,drive=drive1 \ > > > > v11->v12: > > - validate the zoned header extension before allocating any zoned metadata > > - fix the zoned locking discipline: hold the qcow2 state lock (s->lock) > > across all zone-state list updates [Stefan] > > - reject, instead of aborting on an assertion, a write that reaches the > > open-zone limit while every open zone is explicitly open > > - fix reduced-capacity (zone_capacity < zone_size) handling: > > * transition a zone to FULL when the write pointer reaches the zone > > capacity > > * report the zone capacity, not the zone size, in zone_report > > - return -EIO rather than -EINVAL for zone write-rule violations > > - use int64_t for the zoned-metadata cluster offset and zone_size to > > avoid truncation on large images > > - simplify qcow2_cache_set_dependency() [Stefan] > > - virtio-blk: read the zone size through a new blk_get_zone_size() [Stefan] > > > - docs/QAPI: clarify the max_open_zones / max_active_zones / > > max_append_bytes descriptions; use warn_report() for recoverable zoned > > configuration values in qcow2_check_zone_options() [Niklas, Stefan] > > I'm sorry, but to me, it looks like patch 1/5 in v12 is identical to v11. > > Did you perhaps forget to do git add or something?
Ah! I made a mistake of mixing changes of patch 1/5 to 2/5. I'll send a new version. Thanks for checking. Best regards, Sam
