This series aims to enable block resizes when persistent bitmaps are in use. The basic approach here is to recognize that we now load all persistent bitmaps in memory, and so we can rely on in-memory resizes and then flush the changed metadata back to disk.
One part that is potentially now quite strange is that bitmap resizes may happen twice: once during the qcow2 resize event only if persistent bitmaps are found, and then again as part of the generic resize callback event whether or not we have any persistent bitmaps. The second round is required if we are not using qcow2 or we have only transient bitmaps. The first round is required as we wish to flush the bitmaps back to disk atomically with the qcow2 resize to avoid violating our invariants for the bitmap metadata which is checked in many places. This is harmless; hbitmap_truncate will recognize the second round as a no-op. John Snow (5): block/qcow2-bitmap: Skip length check in some cases block/qcow2-bitmap: Allow bitmap flushing block/qcow2-bitmap: don't remove bitmaps on reopen block/qcow2-bitmap: Allow resizes with persistent bitmaps tests/qemu-iotests: add bitmap resize test 246 block/qcow2.h | 2 + block/qcow2-bitmap.c | 123 +++++++++++---- block/qcow2.c | 27 +++- tests/qemu-iotests/246 | 114 ++++++++++++++ tests/qemu-iotests/246.out | 296 +++++++++++++++++++++++++++++++++++++ tests/qemu-iotests/group | 1 + 6 files changed, 528 insertions(+), 35 deletions(-) create mode 100755 tests/qemu-iotests/246 create mode 100644 tests/qemu-iotests/246.out -- 2.17.2