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 <den@openvz.org>
Cc: Peter Xu <peterx@redhat.com>
Cc: Fabiano Rosas <farosas@suse.de>
Cc: Eric Blake <eblake@redhat.com>
Cc: Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru>
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