mirror of https://gitee.com/openkylin/libvirt.git
qemu: monitor: Allow using 'id' instead of 'device' for 'block_set_io_throttle'
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@redhat.com> Reviewed-by: Ján Tomko <jtomko@redhat.com>
This commit is contained in:
parent
e7e2bbdc94
commit
52096e2338
|
@ -18472,7 +18472,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);
|
||||
|
|
|
@ -3444,17 +3444,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);
|
||||
|
|
|
@ -932,7 +932,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,
|
||||
|
|
|
@ -4897,7 +4897,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,
|
||||
|
@ -4907,12 +4908,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,
|
||||
|
@ -4967,10 +4973,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,
|
||||
|
|
|
@ -327,7 +327,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,
|
||||
|
|
|
@ -2146,7 +2146,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;
|
||||
|
||||
|
|
Loading…
Reference in New Issue