BlockPull: Set initial bandwidth limit if specified

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@us.ibm.com>
This commit is contained in:
Adam Litke 2011-09-01 17:35:36 -05:00 committed by Eric Blake
parent 78d9325d1e
commit d4b9e06256
2 changed files with 7 additions and 5 deletions

View File

@ -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 = {

View File

@ -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;