Pull request
This dirty bitmap fix solves a crash that can be triggered in the destination QEMU process during live migration. -----BEGIN PGP SIGNATURE----- iQEzBAABCAAdFiEEhpWov9P5fNqsNXdanKSrs4Grc8gFAmBbUfMACgkQnKSrs4Gr c8hTrgf/f0yUnW6NT6yCPpq5kN4vwaZBS9oOu+WxUlLZE6Rx46zcNnet6yXO6CLI 4EUdHqosuSGw6Hh3Ld3HO4HeUFGZEy8kkKEkQpvtn6d4KptxP/8HxIjPHcK+uzTu yGTHGlZ0xW+1cMmCpa2VhxJGfQhpl8lp07tnedn7Ip+HMkrclvwhipN4lnvZIfzL OG1uCAHqlk/BMGulCief2U4dGAi/DWxQDtzB0/3Lo8F2r08EH8sG8aDaHlD9G2jW Ru/l+5MGHqG7AFKqDei3NF2zaaUqkR+8hQHK1/qJKqhjtMsiHoDYnWcg9MmTRPnv gwSrGti7gvVjIKi/VhV/VCGmCOlChg== =/jcS -----END PGP SIGNATURE----- Merge remote-tracking branch 'remotes/stefanha-gitlab/tags/block-pull-request' into staging Pull request This dirty bitmap fix solves a crash that can be triggered in the destination QEMU process during live migration. # gpg: Signature made Wed 24 Mar 2021 14:51:31 GMT # gpg: using RSA key 8695A8BFD3F97CDAAC35775A9CA4ABB381AB73C8 # gpg: Good signature from "Stefan Hajnoczi <stefanha@redhat.com>" [full] # gpg: aka "Stefan Hajnoczi <stefanha@gmail.com>" [full] # Primary key fingerprint: 8695 A8BF D3F9 7CDA AC35 775A 9CA4 ABB3 81AB 73C8 * remotes/stefanha-gitlab/tags/block-pull-request: migrate-bitmaps-postcopy-test: check that we can't remove in-flight bitmaps migration/block-dirty-bitmap: make incoming disabled bitmaps busy Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
commit
63ad23fa24
@ -839,6 +839,8 @@ static int dirty_bitmap_load_start(QEMUFile *f, DBMLoadState *s)
|
||||
error_report_err(local_err);
|
||||
return -EINVAL;
|
||||
}
|
||||
} else {
|
||||
bdrv_dirty_bitmap_set_busy(s->bitmap, true);
|
||||
}
|
||||
|
||||
b = g_new(LoadBitmapState, 1);
|
||||
@ -914,6 +916,8 @@ static void cancel_incoming_locked(DBMLoadState *s)
|
||||
assert(!s->before_vm_start_handled || !b->migrated);
|
||||
if (bdrv_dirty_bitmap_has_successor(b->bitmap)) {
|
||||
bdrv_reclaim_dirty_bitmap(b->bitmap, &error_abort);
|
||||
} else {
|
||||
bdrv_dirty_bitmap_set_busy(b->bitmap, false);
|
||||
}
|
||||
bdrv_release_dirty_bitmap(b->bitmap);
|
||||
}
|
||||
@ -951,6 +955,8 @@ static void dirty_bitmap_load_complete(QEMUFile *f, DBMLoadState *s)
|
||||
|
||||
if (bdrv_dirty_bitmap_has_successor(s->bitmap)) {
|
||||
bdrv_reclaim_dirty_bitmap(s->bitmap, &error_abort);
|
||||
} else {
|
||||
bdrv_dirty_bitmap_set_busy(s->bitmap, false);
|
||||
}
|
||||
|
||||
for (item = s->bitmaps; item; item = g_slist_next(item)) {
|
||||
|
@ -224,6 +224,16 @@ class TestDirtyBitmapPostcopyMigration(iotests.QMPTestCase):
|
||||
self.start_postcopy()
|
||||
|
||||
self.vm_b_events += self.vm_b.get_qmp_events()
|
||||
|
||||
# While being here, let's check that we can't remove in-flight bitmaps.
|
||||
for vm in (self.vm_a, self.vm_b):
|
||||
for i in range(0, nb_bitmaps):
|
||||
result = vm.qmp('block-dirty-bitmap-remove', node='drive0',
|
||||
name=f'bitmap{i}')
|
||||
self.assert_qmp(result, 'error/desc',
|
||||
f"Bitmap 'bitmap{i}' is currently in use by "
|
||||
"another operation and cannot be used")
|
||||
|
||||
self.vm_b.shutdown()
|
||||
# recreate vm_b, so there is no incoming option, which prevents
|
||||
# loading bitmaps from disk
|
||||
|
Loading…
x
Reference in New Issue
Block a user