[PATCH 3/5] qemuMigrationDstPrepareAnyBlockDirtyBitmaps: Fix check for existing bitmaps

Peter Krempa via Devel posted 5 patches 4 days, 12 hours ago
[PATCH 3/5] qemuMigrationDstPrepareAnyBlockDirtyBitmaps: Fix check for existing bitmaps
Posted by Peter Krempa via Devel 4 days, 12 hours ago
From: Peter Krempa <pkrempa@redhat.com>

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 ater 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>
---
 src/qemu/qemu_migration.c | 16 +++++++---------
 1 file changed, 7 insertions(+), 9 deletions(-)

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;
         }
     }

-- 
2.52.0
Re: [PATCH 3/5] qemuMigrationDstPrepareAnyBlockDirtyBitmaps: Fix check for existing bitmaps
Posted by Ján Tomko via Devel 3 days, 19 hours ago
On a Wednesday in 2026, Peter Krempa via Devel wrote:
>From: Peter Krempa <pkrempa@redhat.com>
>
>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 ater actually

after

Jano

>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>