mirror of https://gitee.com/openkylin/qemu.git
migration/block-dirty-bitmap: simplify dirty_bitmap_load_complete
bdrv_enable_dirty_bitmap_locked() call does nothing, as if we are in postcopy, bitmap successor must be enabled, and reclaim operation will enable the bitmap. So, actually we need just call _reclaim_ in both if branches, and making differences only to add an assertion seems not really good. The logic becomes simple: on load complete we do reclaim and that's all. Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com> Reviewed-by: Andrey Shinkevich <andrey.shinkevich@virtuozzo.com> Message-Id: <20200727194236.19551-14-vsementsov@virtuozzo.com> Signed-off-by: Eric Blake <eblake@redhat.com>
This commit is contained in:
parent
8949121644
commit
f3045b9a82
|
@ -603,6 +603,10 @@ static void dirty_bitmap_load_complete(QEMUFile *f, DBMLoadState *s)
|
||||||
|
|
||||||
qemu_mutex_lock(&s->lock);
|
qemu_mutex_lock(&s->lock);
|
||||||
|
|
||||||
|
if (bdrv_dirty_bitmap_has_successor(s->bitmap)) {
|
||||||
|
bdrv_reclaim_dirty_bitmap(s->bitmap, &error_abort);
|
||||||
|
}
|
||||||
|
|
||||||
for (item = s->enabled_bitmaps; item; item = g_slist_next(item)) {
|
for (item = s->enabled_bitmaps; item; item = g_slist_next(item)) {
|
||||||
LoadBitmapState *b = item->data;
|
LoadBitmapState *b = item->data;
|
||||||
|
|
||||||
|
@ -612,27 +616,6 @@ static void dirty_bitmap_load_complete(QEMUFile *f, DBMLoadState *s)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (bdrv_dirty_bitmap_has_successor(s->bitmap)) {
|
|
||||||
bdrv_dirty_bitmap_lock(s->bitmap);
|
|
||||||
if (s->enabled_bitmaps == NULL) {
|
|
||||||
/* in postcopy */
|
|
||||||
bdrv_reclaim_dirty_bitmap_locked(s->bitmap, &error_abort);
|
|
||||||
bdrv_enable_dirty_bitmap_locked(s->bitmap);
|
|
||||||
} else {
|
|
||||||
/* target not started, successor must be empty */
|
|
||||||
int64_t count = bdrv_get_dirty_count(s->bitmap);
|
|
||||||
BdrvDirtyBitmap *ret = bdrv_reclaim_dirty_bitmap_locked(s->bitmap,
|
|
||||||
NULL);
|
|
||||||
/* bdrv_reclaim_dirty_bitmap can fail only on no successor (it
|
|
||||||
* must be) or on merge fail, but merge can't fail when second
|
|
||||||
* bitmap is empty
|
|
||||||
*/
|
|
||||||
assert(ret == s->bitmap &&
|
|
||||||
count == bdrv_get_dirty_count(s->bitmap));
|
|
||||||
}
|
|
||||||
bdrv_dirty_bitmap_unlock(s->bitmap);
|
|
||||||
}
|
|
||||||
|
|
||||||
qemu_mutex_unlock(&s->lock);
|
qemu_mutex_unlock(&s->lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue