]> xenbits.xensource.com Git - libvirt.git/commitdiff
migration: convert speed from MiB/sec to bytes/sec in drive-mirror jobs
authorRudy Zhang <rudyflyzhang@gmail.com>
Fri, 1 Apr 2016 02:16:53 +0000 (10:16 +0800)
committerJán Tomko <jtomko@redhat.com>
Fri, 1 Apr 2016 08:58:47 +0000 (10:58 +0200)
Commit 08cc14f moved the conversion of MiB/s to B/s out of the
qemuMonitor APIs, but forgot to adjust the qemuMigrationDriveMirror
caller.

This patch will convert the migrate_speed value from MiB/s to its
mirror_speed equivalent in bytes/s.

Signed-off-by: Rudy Zhang <rudyflyzhang@gmail.com>
Signed-off-by: Ján Tomko <jtomko@redhat.com>
src/qemu/qemu_migration.c

index 8bc76bf1671d198942667f87e54e681fe45babda..8d2ca3b6d9bad31ff8f7b5e080e102fbcdd8db43 100644 (file)
@@ -2061,7 +2061,7 @@ qemuMigrationCancelDriveMirror(virQEMUDriverPtr driver,
  * @vm: domain
  * @mig: migration cookie
  * @host: where are we migrating to
- * @speed: how much should the copying be limited
+ * @speed: bandwidth limit in MiB/s
  * @migrate_flags: migrate monitor command flags
  *
  * Run drive-mirror to feed NBD server running on dst and wait
@@ -2093,12 +2093,21 @@ qemuMigrationDriveMirror(virQEMUDriverPtr driver,
     char *diskAlias = NULL;
     char *nbd_dest = NULL;
     char *hoststr = NULL;
+    unsigned long long mirror_speed = speed;
     unsigned int mirror_flags = VIR_DOMAIN_BLOCK_REBASE_REUSE_EXT;
     int rv;
     virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
 
     VIR_DEBUG("Starting drive mirrors for domain %s", vm->def->name);
 
+    if (mirror_speed > LLONG_MAX >> 20) {
+        virReportError(VIR_ERR_OVERFLOW,
+                       _("bandwidth must be less than %llu"),
+                       LLONG_MAX >> 20);
+        goto cleanup;
+    }
+    mirror_speed <<= 20;
+
     /* steal NBD port and thus prevent its propagation back to destination */
     port = mig->nbd->port;
     mig->nbd->port = 0;
@@ -2136,7 +2145,7 @@ qemuMigrationDriveMirror(virQEMUDriverPtr driver,
         qemuBlockJobSyncBegin(disk);
         /* Force "raw" format for NBD export */
         mon_ret = qemuMonitorDriveMirror(priv->mon, diskAlias, nbd_dest,
-                                         "raw", speed, 0, 0, mirror_flags);
+                                         "raw", mirror_speed, 0, 0, mirror_flags);
         VIR_FREE(diskAlias);
         VIR_FREE(nbd_dest);