This fixed bug #2369 [1]
This patch is a new implementation for a previous (non-merged) patch to make measure useful to calculate
the new size of the target image after commit.
It is very useful to have this kind of calculation if you do qcow2 on block storage (like iSCSi).
This because you need to be able to size the target volume big enough to handle the committed image.
Instead of modifying the existing measure logic, a new logic was added that really looks into the allocated
clusters and use the (local) next_cluster_index to calculate the target image size.
It also takes into account discards from the top into base to lower the index when a cluster is freed.
New test was added to verify the code.
When testing the new code on the impacted images in bug #2369 [1], this gives the following results:
Start:
<filesize> <image>
6174015488 top
13421772800 base
calculate with discard-no-unref=on:
required -> 13624475648
Commited image size: 13610385408
When calculating with discard-no-unref=off:
required -> 13520404480
Commited image size: 13504806912
Let me know if I made some mistakes :)
[1]: https://gitlab.com/qemu-project/qemu/-/issues/2369
Jean-Louis Dupond (3):
block: add for_commit option to measure
qcow2: make measure for_commit aware
iotests/290: add test case for for_commit measure
block/qcow2.c | 137 +++++++++++++++++++++++++++++--
include/block/block_int-common.h | 4 +
qapi/block-core.json | 28 +++++++
qemu-img.c | 40 +++++++--
tests/qemu-iotests/290 | 45 ++++++++++
tests/qemu-iotests/290.out | 61 ++++++++++++++
6 files changed, 304 insertions(+), 11 deletions(-)
--
2.49.0