[libvirt] [PATCH 6/6] virsh: blockpull: Support --bytes and scaled integers

Peter Krempa pkrempa at redhat.com
Fri Mar 18 08:57:05 UTC 2016


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




More information about the libvir-list mailing list