This implements handling of bitmaps during block-commit so that incremental backups are not broken after commit. Note that this applies on top of https://www.redhat.com/archives/libvir-list/2020-February/msg01125.html or can be fetched at git fetch https://gitlab.com/pipo.sk/libvirt.git reopen-impl https://gitlab.com/pipo.sk/libvirt/-/commits/reopen-impl It uses blockdev-reopen so it's required to use that series. As noted the branch mentioned above the series contains patches to enable incremental backup and blockdev-reopen and depends on the following qemu patches: https://lists.gnu.org/archive/html/qemu-block/2020-02/msg01423.html https://lists.gnu.org/archive/html/qemu-block/2020-02/msg01467.html git fetch https://gitlab.com/pipo.sk/qemu.git bitmap-reopen https://gitlab.com/pipo.sk/qemu/-/commits/bitmap-reopen Peter Krempa (13): qemu: domain: Extract formatting of 'commit' blockjob data into a function qemu: domain: Extract parsing of 'commit' blockjob data into a function qemu: blockjob: Store list of bitmaps disabled prior to commit qemublocktest: Fix and optimize fake image chain qemu: block: Implement helpers for dealing with bitmaps during block commit qemublocktest: Add tests for handling of bitmaps during block-commit qemublocktest: Add more tests for block-commit bitmap handling with snapshots qemublocktest: Add tests of broken bitmap chain handling during block-commit qemuBlockJobDiskNewCommit: Propagate 'disabledBitmapsBase' qemuDomainBlockCommit: Handle bitmaps on start of commit qemuDomainBlockPivot: Handle merging of bitmaps when pivoting an active block-commit qemu: blockjob: Handle bitmaps after finish of normal block-commit qemu: blockjob: Re-enable bitmaps after failed block-copy src/qemu/qemu_block.c | 217 ++++++++++++++++++ src/qemu/qemu_block.h | 14 ++ src/qemu/qemu_blockjob.c | 94 +++++++- src/qemu/qemu_blockjob.h | 3 + src/qemu/qemu_domain.c | 110 ++++++--- src/qemu/qemu_driver.c | 59 ++++- tests/qemublocktest.c | 126 +++++++++- .../bitmapblockcommit/basic-1-2 | 119 ++++++++++ .../bitmapblockcommit/basic-1-3 | 119 ++++++++++ .../bitmapblockcommit/basic-2-3 | 2 + .../bitmapblockcommit/snapshots-1-2 | 49 ++++ .../bitmapblockcommit/snapshots-1-3 | 76 ++++++ .../bitmapblockcommit/snapshots-1-4 | 126 ++++++++++ .../bitmapblockcommit/snapshots-1-5 | 130 +++++++++++ .../bitmapblockcommit/snapshots-2-3 | 49 ++++ .../bitmapblockcommit/snapshots-2-4 | 99 ++++++++ .../bitmapblockcommit/snapshots-2-5 | 103 +++++++++ .../bitmapblockcommit/snapshots-3-4 | 72 ++++++ .../bitmapblockcommit/snapshots-3-5 | 76 ++++++ .../bitmapblockcommit/snapshots-4-4 | 11 + .../bitmapblockcommit/snapshots-4-5 | 33 +++ .../snapshots-synthetic-broken-1-2 | 30 +++ .../snapshots-synthetic-broken-1-3 | 66 ++++++ .../snapshots-synthetic-broken-1-4 | 76 ++++++ .../snapshots-synthetic-broken-1-5 | 76 ++++++ .../snapshots-synthetic-broken-2-3 | 43 ++++ .../snapshots-synthetic-broken-2-4 | 53 +++++ .../snapshots-synthetic-broken-2-5 | 53 +++++ .../snapshots-synthetic-broken-3-4 | 30 +++ .../snapshots-synthetic-broken-3-5 | 30 +++ .../snapshots-synthetic-broken-4-5 | 20 ++ .../blockjob-blockdev-in.xml | 4 + 32 files changed, 2135 insertions(+), 33 deletions(-) create mode 100644 tests/qemublocktestdata/bitmapblockcommit/basic-1-2 create mode 100644 tests/qemublocktestdata/bitmapblockcommit/basic-1-3 create mode 100644 tests/qemublocktestdata/bitmapblockcommit/basic-2-3 create mode 100644 tests/qemublocktestdata/bitmapblockcommit/snapshots-1-2 create mode 100644 tests/qemublocktestdata/bitmapblockcommit/snapshots-1-3 create mode 100644 tests/qemublocktestdata/bitmapblockcommit/snapshots-1-4 create mode 100644 tests/qemublocktestdata/bitmapblockcommit/snapshots-1-5 create mode 100644 tests/qemublocktestdata/bitmapblockcommit/snapshots-2-3 create mode 100644 tests/qemublocktestdata/bitmapblockcommit/snapshots-2-4 create mode 100644 tests/qemublocktestdata/bitmapblockcommit/snapshots-2-5 create mode 100644 tests/qemublocktestdata/bitmapblockcommit/snapshots-3-4 create mode 100644 tests/qemublocktestdata/bitmapblockcommit/snapshots-3-5 create mode 100644 tests/qemublocktestdata/bitmapblockcommit/snapshots-4-4 create mode 100644 tests/qemublocktestdata/bitmapblockcommit/snapshots-4-5 create mode 100644 tests/qemublocktestdata/bitmapblockcommit/snapshots-synthetic-broken-1-2 create mode 100644 tests/qemublocktestdata/bitmapblockcommit/snapshots-synthetic-broken-1-3 create mode 100644 tests/qemublocktestdata/bitmapblockcommit/snapshots-synthetic-broken-1-4 create mode 100644 tests/qemublocktestdata/bitmapblockcommit/snapshots-synthetic-broken-1-5 create mode 100644 tests/qemublocktestdata/bitmapblockcommit/snapshots-synthetic-broken-2-3 create mode 100644 tests/qemublocktestdata/bitmapblockcommit/snapshots-synthetic-broken-2-4 create mode 100644 tests/qemublocktestdata/bitmapblockcommit/snapshots-synthetic-broken-2-5 create mode 100644 tests/qemublocktestdata/bitmapblockcommit/snapshots-synthetic-broken-3-4 create mode 100644 tests/qemublocktestdata/bitmapblockcommit/snapshots-synthetic-broken-3-5 create mode 100644 tests/qemublocktestdata/bitmapblockcommit/snapshots-synthetic-broken-4-5 -- 2.24.1