This series add persistent dirty bitmaps feature to qcow2. Specification is in docs/spec/qcow2.txt (not merged yet, see [PATCH v10] spec: add qcow2 bitmaps extension specification)
This series are based on Fam's [PATCH v2 00/13] Dirty bitmap changes for migration/persistence work (meta bitmaps not used, and only hbitmap_deserialize_finish from serialization) This also needs some preparation patches, most of them are in my bitmap-migration series. I've not listed them here to keep things simpler, this is RFC any way. v4: Previous version was posted more than five months ago, so I will not carefully list all changes. What should be noted: - some changes are made to sutisfy last version of specification - removed staff, related to possibility of saving bitmaps for one disk in the other qcow2. - to make bitmap store/load zero-copy, I've moved load/store code to HBitmap - this is new patch 01. so, bdrv_dirty_bitmap_serialize_part and friends are not needed, only hbitmap_deserialize_finish, to repair bitmap consistency after loading its last level. - two patches added about AUTO and EXTRA_DATA_COMPATIBLE flags - some fixes made after John's comments on v3 Vladimir Sementsov-Ogievskiy (17): hbitmap: load/store qcow2: Bitmaps extension: structs and consts qcow2-dirty-bitmap: read dirty bitmap directory qcow2-dirty-bitmap: add qcow2_bitmap_load() qcow2-dirty-bitmap: add qcow2_bitmap_store() qcow2: add dirty bitmaps extension qcow2-dirty-bitmap: add qcow2_bitmap_load_check() block: store persistent dirty bitmaps block: add bdrv_load_dirty_bitmap() qcow2-dirty-bitmap: add autoclear bit qemu: command line option for dirty bitmaps qcow2-dirty-bitmap: add IN_USE flag qcow2-dirty-bitmaps: disallow stroing bitmap to other bs iotests: add VM.test_launcn() iotests: test internal persistent dirty bitmap qcow2-dirty-bitmap: add AUTO flag qcow2-dirty-bitmap: add EXTRA_DATA_COMPATIBLE flag block.c | 3 + block/Makefile.objs | 2 +- block/dirty-bitmap.c | 101 +++++ block/qcow2-dirty-bitmap.c | 839 ++++++++++++++++++++++++++++++++++++++++++ block/qcow2.c | 105 +++++- block/qcow2.h | 59 +++ blockdev.c | 36 ++ include/block/block_int.h | 9 + include/block/dirty-bitmap.h | 21 ++ include/qemu/hbitmap.h | 12 + include/sysemu/blockdev.h | 1 + include/sysemu/sysemu.h | 1 + qemu-options.hx | 35 ++ tests/qemu-iotests/160 | 112 ++++++ tests/qemu-iotests/160.out | 21 ++ tests/qemu-iotests/group | 1 + tests/qemu-iotests/iotests.py | 25 ++ util/hbitmap.c | 182 +++++++++ vl.c | 78 ++++ 19 files changed, 1640 insertions(+), 3 deletions(-) create mode 100644 block/qcow2-dirty-bitmap.c create mode 100755 tests/qemu-iotests/160 create mode 100644 tests/qemu-iotests/160.out -- 1.8.3.1