Hi, With c3b6658c1a5a3fb2, Kevin has fixed a case in alloc_cluster_abort() where we used to free a cluster that wasn’t even allocated by handle_alloc(), thus leading to an error and/or corruption. Besides external data files, there is another case where alloc_cluster_abort() must not free the “new” cluster: Namely when the cluster isn’t new because we’re reusing an existing pre-allocated zero cluster.
I think Berto’s subcluster series fixes this, too, but it’s still an RFC, so I suppose we have to fix the bug independently of it. Patch 2 adds a regression test; patch 3 adds a regression test for Kevin’s patch c3b6658c1a5a3fb2 (which didn’t come with one). Max Reitz (3): qcow2: Fix alloc_cluster_abort() for pre-existing clusters iotests/026: Test EIO on preallocated zero cluster iotests/026: Test EIO on allocation in a data-file block/qcow2-cluster.c | 2 +- tests/qemu-iotests/026 | 53 ++++++++++++++++++++++++++++++ tests/qemu-iotests/026.out | 16 +++++++++ tests/qemu-iotests/026.out.nocache | 16 +++++++++ 4 files changed, 86 insertions(+), 1 deletion(-) -- 2.24.1