From: Peter Krempa Date: Tue, 27 Jan 2026 18:22:08 +0000 (+0100) Subject: qemuMigrationDstPrepareAnyBlockDirtyBitmaps: Fix check for existing bitmaps X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0c75fc1747f039bf878ceab69cf12482ebb14095;p=thirdparty%2Flibvirt.git 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 Reviewed-by: Ján Tomko --- diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c index 6dd022163b..a502515d93 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -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; } }