Reuse the approach and helper from the last patch. --- tools/virsh-domain.c | 15 +++++++++++++-- tools/virsh.pod | 9 ++++----- 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/tools/virsh-domain.c b/tools/virsh-domain.c index 4053c75..f808c73 100644 --- a/tools/virsh-domain.c +++ b/tools/virsh-domain.c @@ -2761,6 +2761,10 @@ static const vshCmdOptDef opts_block_pull[] = { .type = VSH_OT_BOOL, .help = N_("keep the backing chain relatively referenced") }, + {.name = "bytes", + .type = VSH_OT_BOOL, + .help = N_("the bandwidth limit is in bytes/s rather than MiB/s") + }, {.name = NULL} }; @@ -2772,6 +2776,7 @@ cmdBlockPull(vshControl *ctl, const vshCmd *cmd) bool blocking = vshCommandOptBool(cmd, "wait"); bool verbose = vshCommandOptBool(cmd, "verbose"); bool async = vshCommandOptBool(cmd, "async"); + bool bytes = vshCommandOptBool(cmd, "bytes"); int timeout = 0; const char *path = NULL; const char *base = NULL; @@ -2788,7 +2793,7 @@ cmdBlockPull(vshControl *ctl, const vshCmd *cmd) if (vshCommandOptStringReq(ctl, cmd, "base", &base) < 0) return false; - if (vshCommandOptULWrap(ctl, cmd, "bandwidth", &bandwidth) < 0) + if (vshBlockJobOptionBandwidth(ctl, cmd, bytes, &bandwidth) < 0) return false; if (vshCommandOptTimeoutToMs(ctl, cmd, &timeout) < 0) @@ -2806,10 +2811,16 @@ cmdBlockPull(vshControl *ctl, const vshCmd *cmd) goto cleanup; if (base || flags) { + if (bytes) + flags |= VIR_DOMAIN_BLOCK_REBASE_BANDWIDTH_BYTES; + if (virDomainBlockRebase(dom, path, base, bandwidth, flags) < 0) goto cleanup; } else { - if (virDomainBlockPull(dom, path, bandwidth, 0) < 0) + if (bytes) + flags |= VIR_DOMAIN_BLOCK_PULL_BANDWIDTH_BYTES; + + if (virDomainBlockPull(dom, path, bandwidth, flags) < 0) goto cleanup; } diff --git a/tools/virsh.pod b/tools/virsh.pod index 26cfe35..35bc101 100644 --- a/tools/virsh.pod +++ b/tools/virsh.pod @@ -1046,7 +1046,7 @@ within a certain range. Specifying I<buf-size> will control how much data can be simultaneously in-flight during the copy; larger values use more memory but may allow faster completion (the default value is usually correct). -=item B<blockpull> I<domain> I<path> [I<bandwidth>] [I<base>] +=item B<blockpull> I<domain> I<path> [I<bandwidth>] [I<--bytes>] [I<base>] [I<--wait> [I<--verbose>] [I<--timeout> B<seconds>] [I<--async>]] [I<--keep-relative>] @@ -1075,10 +1075,9 @@ I<path> specifies fully-qualified path of the disk; it corresponds to a unique target name (<target dev='name'/>) or source file (<source file='name'/>) for one of the disk devices attached to I<domain> (see also B<domblklist> for listing these names). -I<bandwidth> specifies copying bandwidth limit in MiB/s. Specifying a negative -value is interpreted as an unsigned long long value or essentially -unlimited. The hypervisor can choose whether to reject the value or -convert it to the maximum value allowed. +I<bandwidth> specifies copying bandwidth limit in MiB/s. For further information +on the I<bandwidth> argument see the corresponding section for the B<blockjob> +command. =item B<blkdeviotune> I<domain> I<device> [[I<--config>] [I<--live>] | [I<--current>]] -- 2.7.3 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list