The 'device' argument matches only the legacy drive alias. For blockdev
we need to set the throttling for a QOM id and thus we'll need to use
the 'id' field.
Signed-off-by: Peter Krempa <pkrempa(a)redhat.com>
---
src/qemu/qemu_driver.c | 2 +-
src/qemu/qemu_monitor.c | 8 +++++---
src/qemu/qemu_monitor.h | 3 ++-
src/qemu/qemu_monitor_json.c | 14 ++++++++++----
src/qemu/qemu_monitor_json.h | 3 ++-
tests/qemumonitorjsontest.c | 2 +-
6 files changed, 21 insertions(+), 11 deletions(-)
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index fb0d4a8c7a..ae762a3189 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -18494,7 +18494,7 @@ qemuDomainSetBlockIoTune(virDomainPtr dom,
* via the JSON error code from the block_set_io_throttle call */
qemuDomainObjEnterMonitor(driver, vm);
- ret = qemuMonitorSetBlockIoThrottle(priv->mon, device,
+ ret = qemuMonitorSetBlockIoThrottle(priv->mon, device, NULL,
&info, supportMaxOptions,
set_fields &
QEMU_BLOCK_IOTUNE_SET_GROUP_NAME,
supportMaxLengthOptions);
diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c
index 6e0644221b..84310ff8ca 100644
--- a/src/qemu/qemu_monitor.c
+++ b/src/qemu/qemu_monitor.c
@@ -3448,17 +3448,19 @@ qemuMonitorGetBlockJobInfo(qemuMonitorPtr mon,
int
qemuMonitorSetBlockIoThrottle(qemuMonitorPtr mon,
- const char *device,
+ const char *drivealias,
+ const char *qomid,
virDomainBlockIoTuneInfoPtr info,
bool supportMaxOptions,
bool supportGroupNameOption,
bool supportMaxLengthOptions)
{
- VIR_DEBUG("device=%p, info=%p", device, info);
+ VIR_DEBUG("drivealias=%s, qomid=%s, info=%p",
+ NULLSTR(drivealias), NULLSTR(qomid), info);
QEMU_CHECK_MONITOR(mon);
- return qemuMonitorJSONSetBlockIoThrottle(mon, device, info,
+ return qemuMonitorJSONSetBlockIoThrottle(mon, drivealias, qomid, info,
supportMaxOptions,
supportGroupNameOption,
supportMaxLengthOptions);
diff --git a/src/qemu/qemu_monitor.h b/src/qemu/qemu_monitor.h
index 2fa8d5b51d..01860f11f4 100644
--- a/src/qemu/qemu_monitor.h
+++ b/src/qemu/qemu_monitor.h
@@ -933,7 +933,8 @@ int qemuMonitorOpenGraphics(qemuMonitorPtr mon,
bool skipauth);
int qemuMonitorSetBlockIoThrottle(qemuMonitorPtr mon,
- const char *device,
+ const char *drivealias,
+ const char *qomid,
virDomainBlockIoTuneInfoPtr info,
bool supportMaxOptions,
bool supportGroupNameOption,
diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c
index abbcede097..fc65198f6f 100644
--- a/src/qemu/qemu_monitor_json.c
+++ b/src/qemu/qemu_monitor_json.c
@@ -4913,7 +4913,8 @@ qemuMonitorJSONBlockIoThrottleInfo(virJSONValuePtr io_throttle,
#undef GET_THROTTLE_STATS_OPTIONAL
int qemuMonitorJSONSetBlockIoThrottle(qemuMonitorPtr mon,
- const char *device,
+ const char *drivealias,
+ const char *qomid,
virDomainBlockIoTuneInfoPtr info,
bool supportMaxOptions,
bool supportGroupNameOption,
@@ -4923,12 +4924,17 @@ int qemuMonitorJSONSetBlockIoThrottle(qemuMonitorPtr mon,
virJSONValuePtr cmd = NULL;
virJSONValuePtr result = NULL;
virJSONValuePtr args = NULL;
+ const char *errdev = drivealias;
+
+ if (!errdev)
+ errdev = qomid;
if (!(cmd = qemuMonitorJSONMakeCommand("block_set_io_throttle", NULL)))
return -1;
if (virJSONValueObjectCreate(&args,
- "s:device", device,
+ "S:device", drivealias,
+ "S:id", qomid,
"U:bps", info->total_bytes_sec,
"U:bps_rd", info->read_bytes_sec,
"U:bps_wr", info->write_bytes_sec,
@@ -4983,10 +4989,10 @@ int qemuMonitorJSONSetBlockIoThrottle(qemuMonitorPtr mon,
if (virJSONValueObjectHasKey(result, "error")) {
if (qemuMonitorJSONHasError(result, "DeviceNotActive")) {
virReportError(VIR_ERR_OPERATION_INVALID,
- _("No active operation on device: %s"), device);
+ _("No active operation on device: %s"), errdev);
} else if (qemuMonitorJSONHasError(result, "NotSupported")) {
virReportError(VIR_ERR_OPERATION_INVALID,
- _("Operation is not supported for device: %s"),
device);
+ _("Operation is not supported for device: %s"),
errdev);
} else {
virJSONValuePtr error = virJSONValueObjectGet(result, "error");
virReportError(VIR_ERR_INTERNAL_ERROR,
diff --git a/src/qemu/qemu_monitor_json.h b/src/qemu/qemu_monitor_json.h
index 2408ab0c5b..5b5defc3f5 100644
--- a/src/qemu/qemu_monitor_json.h
+++ b/src/qemu/qemu_monitor_json.h
@@ -328,7 +328,8 @@ int qemuMonitorJSONOpenGraphics(qemuMonitorPtr mon,
bool skipauth);
int qemuMonitorJSONSetBlockIoThrottle(qemuMonitorPtr mon,
- const char *device,
+ const char *drivealias,
+ const char *qomid,
virDomainBlockIoTuneInfoPtr info,
bool supportMaxOptions,
bool supportGroupNameOption,
diff --git a/tests/qemumonitorjsontest.c b/tests/qemumonitorjsontest.c
index 1826c4f297..e1f4c27a63 100644
--- a/tests/qemumonitorjsontest.c
+++ b/tests/qemumonitorjsontest.c
@@ -2130,7 +2130,7 @@ testQemuMonitorJSONqemuMonitorJSONSetBlockIoThrottle(const void
*data)
goto cleanup;
if (qemuMonitorJSONSetBlockIoThrottle(qemuMonitorTestGetMonitor(test),
- "drive-virtio-disk1", &info,
true,
+ "drive-virtio-disk1", NULL,
&info, true,
true, true) < 0)
goto cleanup;
--
2.16.2