Hi, Some people want to create a qcow2 image for an existing raw image while that raw image is in use by a VM. That is, the raw image is attached to a guest device, and the new qcow2 image is supposed to use it as its raw external data file.
This series makes that work by relaxing the permissions taken by the qcow2 driver on the external data file during qcow2 image creation, i.e. no longer taking the WRITE flag (unless preallocation was requested), which allows simultaneous use of the file e.g. as a raw image attached to the VM. The v1 cover letter with some more info is here: https://lists.nongnu.org/archive/html/qemu-block/2026-02/msg00090.html v2: - Drop the new flags, use BDRV_O_NO_IO and !BDRV_O_RESIZE instead - This necessitates making qcow2_do_open() attach the data-file child even with BDRV_O_NO_IO if the "data-file" option is a string (i.e. a node name), that's patch 2 - It also requires bypassing the block layer for resizing the qcow2 image, i.e. we need to call qcow2_co_truncate() directly instead of going through blk_co_truncate(), that's patch 4 - Fixed the typing in patch 3 for a subtraction (should have cast both new_length and m->offset to int64_t, not just the latter) - Proper locking around bdrv_co_getlength() - Check bdrv_co_getlength() against (int64_t)qcow2_opts->size to catch error cases (instead of not casting the latter and having the former underflow) - Fixed f-string compatibility in the new test git-backport-diff against v1: Key: [----] : patches are identical [####] : number of functional differences between upstream/downstream patch [down] : patch is downstream-only The flags [FC] indicate (F)unctional and (C)ontextual differences, respectively 001/6:[----] [--] 'qcow2: Skip data-file resize if possible' 002/6:[down] 'qcow2: Always attach data-file given by node name' 003/6:[0006] [FC] 'qcow2: Preallocation: Do not COW after disk end' 004/6:[down] 'qcow2: Call qcow2_co_truncate() directly' 005/6:[0058] [FC] 'qcow2: Suppress data-file WRITE/RESIZE if possible' 006/6:[0030] [FC] 'iotests: Add qcow2-live-data-file test' Hanna Czenczek (6): qcow2: Skip data-file resize if possible qcow2: Always attach data-file given by node name qcow2: Preallocation: Do not COW after disk end qcow2: Call qcow2_co_truncate() directly qcow2: Suppress data-file WRITE/RESIZE if possible iotests: Add qcow2-live-data-file test block/qcow2.c | 145 +- tests/qemu-iotests/125 | 17 +- tests/qemu-iotests/206.out | 6 +- tests/qemu-iotests/tests/qcow2-live-data-file | 280 ++ .../tests/qcow2-live-data-file.out | 2904 +++++++++++++++++ 5 files changed, 3324 insertions(+), 28 deletions(-) create mode 100755 tests/qemu-iotests/tests/qcow2-live-data-file create mode 100644 tests/qemu-iotests/tests/qcow2-live-data-file.out -- 2.53.0
