[libvirt] [PATCH] BlockPull: Set initial bandwidth limit if specified

Adam Litke agl at us.ibm.com
Thu Sep 1 22:35:36 UTC 2011


The libvirt BlockPull API supports the use of an initial bandwidth limit but the
qemu block_stream API does not.  To get the desired behavior we use the two APIs
strung together: first BlockPull, then BlockJobSetSpeed.  We can do this at the
driver level to avoid duplicated code in each monitor path.

Signed-off-by: Adam Litke <agl at us.ibm.com>
---
 src/qemu/qemu_driver.c       |    8 +++++++-
 src/qemu/qemu_monitor_json.c |    4 ----
 2 files changed, 7 insertions(+), 5 deletions(-)

diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index 4e8c691..7476bb4 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -9418,8 +9418,14 @@ static int
 qemuDomainBlockPull(virDomainPtr dom, const char *path, unsigned long bandwidth,
                     unsigned int flags)
 {
+    int ret;
+
     virCheckFlags(0, -1);
-    return qemuDomainBlockJobImpl(dom, path, bandwidth, NULL, BLOCK_JOB_PULL);
+    ret = qemuDomainBlockJobImpl(dom, path, bandwidth, NULL, BLOCK_JOB_PULL);
+    if (ret == 0 && bandwidth != 0)
+        ret = qemuDomainBlockJobImpl(dom, path, bandwidth, NULL,
+                                     BLOCK_JOB_SPEED);
+    return ret;
 }
 
 static virDriver qemuDriver = {
diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c
index 715b26e..4ceb536 100644
--- a/src/qemu/qemu_monitor_json.c
+++ b/src/qemu/qemu_monitor_json.c
@@ -2956,10 +2956,6 @@ int qemuMonitorJSONBlockJob(qemuMonitorPtr mon,
     if (ret == 0 && mode == BLOCK_JOB_INFO)
         ret = qemuMonitorJSONGetBlockJobInfo(reply, device, info);
 
-    if (ret == 0 && mode == BLOCK_JOB_PULL && bandwidth != 0)
-        ret = qemuMonitorJSONBlockJob(mon, device, bandwidth, NULL,
-                                      BLOCK_JOB_SPEED);
-
     virJSONValueFree(cmd);
     virJSONValueFree(reply);
     return ret;
-- 
1.7.3




More information about the libvir-list mailing list