[libvirt] [PATCH v2] migration: convert speed from Mb/sec to bytes/sec in drive-mirror jobs

Ján Tomko jtomko at redhat.com
Fri Apr 1 09:17:13 UTC 2016


On Fri, Apr 01, 2016 at 10:16:53AM +0800, Rudy Zhang wrote:
> Commit id '7b7600b3' added qemuMigrationDriveMirror to handle NBD
> mirroring, but passed the migrate_speed listed in MiB/s to be used for
> the mirror_speed which expects a bytes/s value.
> 

Misleading, qemuMonitorDriveMirror expected MiB/s at the time.
I changed the commit message to:

    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 to its mirror_speed
> equivalent.
> 
> Signed-off-by: Rudy Zhang <rudyflyzhang at gmail.com>
> ---
>  src/qemu/qemu_migration.c | 11 ++++++++++-
>  1 file changed, 10 insertions(+), 1 deletion(-)
> 
> diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c
> index 8bc76bf..3d9a55f 100644
> --- a/src/qemu/qemu_migration.c
> +++ b/src/qemu/qemu_migration.c
> @@ -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);
> +        return ret;

    goto cleanup;

Otherwise we leak a reference to cfg.

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

ACK and pushed

Congratulations on your first libvirt patch!

Jan




More information about the libvir-list mailing list