Postcopy migration of dirty bitmaps kills the destination as soon as bitmaps live on more than one node:
qemu-system-x86_64: ../block.c:6400: bdrv_lookup_bs: Assertion `qemu_in_main_thread()' failed. The postcopy listen thread resolves node names with bdrv_lookup_bs() without the BQL. With a single node the name is sent only during setup, which runs in the main thread, so the existing test never gets there. We hit it in production with libvirt: a CBT backup leaves a persistent bitmap on every disk, libvirt enables the dirty-bitmaps capability, and the next live migration of any VM with more than one disk aborts the destination after the guest has already been switched over to it. Patch 1 resolves every chunk but START from the bitmaps that START set up, instead of from the block graph. Patch 2 extends migrate-bitmaps-postcopy-test with a bitmap on a second node, and it fails without patch 1. Signed-off-by: Denis V. Lunev <[email protected]> Cc: Peter Xu <[email protected]> Cc: Fabiano Rosas <[email protected]> Cc: Eric Blake <[email protected]> Cc: Vladimir Sementsov-Ogievskiy <[email protected]> Denis V. Lunev (2): migration/block-dirty-bitmap: fix postcopy abort with bitmaps on several nodes iotests/migrate-bitmaps-postcopy-test: add a bitmap on a second node migration/block-dirty-bitmap.c | 59 +++++++++++++++++-- .../tests/migrate-bitmaps-postcopy-test | 19 ++++++ 2 files changed, 74 insertions(+), 4 deletions(-) base-commit: 942229961efea74b153c44c59188eb08375f10f1 -- 2.53.0
