mirror of
https://github.com/libvirt/libvirt.git
synced 2026-10-02 12:20:06 -05:00
qemuMigrationDstPrepareAnyBlockDirtyBitmaps: Fix check for existing bitmaps
On incoming migration qemu doesn't load bitmaps into memory (which makes them available under the 'dirty-bitmaps' field which we parse as the 'bitmaps' array in 'qemuBlockNamedNodeData') until after actually resuming CPUs, thus the check for existing bitmaps never actually worked. We need to check the 'qcow2bitmaps' field instead which is populated from the qcow2 headers prior to activating the image. Signed-off-by: Peter Krempa <pkrempa@redhat.com> Reviewed-by: Ján Tomko <jtomko@redhat.com>
This commit is contained in:
1 parent
b2fe3465de
commit
0c75fc1747
1 file changed
+7
-9
@@ -3230,6 +3230,8 @@ qemuMigrationDstPrepareAnyBlockDirtyBitmaps(virDomainObj *vm,
|
||||
qemuBlockNamedNodeData *nodedata;
|
||||
GSList *nextbitmap;
|
||||
|
||||
VIR_DEBUG("offer migrate bitmaps for '%s'", disk->target);
|
||||
|
||||
if (!(nodedata = virHashLookup(blockNamedNodeData, disk->nodename))) {
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
_("failed to find data for block node '%1$s'"),
|
||||
@@ -3246,18 +3248,14 @@ qemuMigrationDstPrepareAnyBlockDirtyBitmaps(virDomainObj *vm,
|
||||
|
||||
for (nextbitmap = disk->bitmaps; nextbitmap; nextbitmap = nextbitmap->next) {
|
||||
qemuMigrationBlockDirtyBitmapsDiskBitmap *bitmap = nextbitmap->data;
|
||||
size_t k;
|
||||
|
||||
/* don't migrate into existing bitmaps */
|
||||
for (k = 0; k < nodedata->nbitmaps; k++) {
|
||||
if (STREQ(bitmap->bitmapname, nodedata->bitmaps[k]->name)) {
|
||||
bitmap->skip = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (nodedata->qcow2bitmaps)
|
||||
bitmap->skip = g_strv_contains((const char **) nodedata->qcow2bitmaps, bitmap->bitmapname);
|
||||
|
||||
VIR_DEBUG("offer migrate bitmap '%s' disk '%s' -> skip: '%d'",
|
||||
bitmap->bitmapname, disk->target, bitmap->skip);
|
||||
|
||||
if (bitmap->skip)
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user