[libvirt] [PATCH] qemu-migration: Disallow migration of read only disk

Corey S. McQuay csmcquay at linux.vnet.ibm.com
Wed Sep 14 14:37:07 UTC 2016


Currently Libvirt allows attempts to migrate read only disks. Qemu cannot handle this as read only
disks cannot be written to on the destination system. The end result is a cryptic error message
and a failed migration.

This patch causes migration to fail earlier and provides a meaningful error message stating that
migrating read only disks is not supported.

Signed-off-by: Corey S. McQuay <csmcquay at linux.vnet.ibm.com>
Reviewed-by: Jason J. Herne <jjherne at linux.vnet.ibm.com>
Reviewed-by: Boris Fiuczynski <fiuczy at linux.vnet.ibm.com>
---
 src/qemu/qemu_migration.c | 25 +++++++++++++++++++++++++
 1 file changed, 25 insertions(+)

diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c
index e451ef6..3311711 100644
--- a/src/qemu/qemu_migration.c
+++ b/src/qemu/qemu_migration.c
@@ -2392,6 +2392,28 @@ qemuMigrationIsSafe(virDomainDefPtr def,
     return true;
 }
 
+static bool
+qemuMigrationAreAllDisksRW(virDomainDefPtr def,
+                    size_t nmigrate_disks,
+                    const char **migrate_disks)
+{
+    size_t i;
+
+    for (i = 0; i < def->ndisks; i++) {
+        virDomainDiskDefPtr disk = def->disks[i];
+
+        if (qemuMigrateDisk(disk, nmigrate_disks, migrate_disks) &&
+            disk->src->readonly) {
+            virReportError(VIR_ERR_OPERATION_UNSUPPORTED,
+                       _("Cannot migrate read-only disk %s"),
+                       disk->dst);
+            return false;
+        }
+    }
+
+    return true;
+}
+
 /** qemuMigrationSetOffline
  * Pause domain for non-live migration.
  */
@@ -3137,6 +3159,9 @@ qemuMigrationBeginPhase(virQEMUDriverPtr driver,
         !qemuMigrationIsSafe(vm->def, nmigrate_disks, migrate_disks))
         goto cleanup;
 
+    if (!qemuMigrationAreAllDisksRW(vm->def, nmigrate_disks, migrate_disks))
+        goto cleanup;
+
     if (flags & VIR_MIGRATE_POSTCOPY &&
         (!(flags & VIR_MIGRATE_LIVE) ||
          flags & VIR_MIGRATE_PAUSED)) {
-- 
2.7.4




More information about the libvir-list mailing list