mirror of
https://github.com/qemu/qemu.git
synced 2025-01-18 11:33:27 +08:00
qmp: add block_job_set_speed command
Add block_job_set_speed, which sets the maximum speed for a background block operation. Signed-off-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com> Acked-by: Luiz Capitulino <lcapitulino@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
parent
12bd451fe0
commit
2d47c6e9aa
25
blockdev.c
25
blockdev.c
@ -964,3 +964,28 @@ void qmp_block_stream(const char *device, bool has_base,
|
||||
|
||||
trace_qmp_block_stream(bs, bs->job);
|
||||
}
|
||||
|
||||
static BlockJob *find_block_job(const char *device)
|
||||
{
|
||||
BlockDriverState *bs;
|
||||
|
||||
bs = bdrv_find(device);
|
||||
if (!bs || !bs->job) {
|
||||
return NULL;
|
||||
}
|
||||
return bs->job;
|
||||
}
|
||||
|
||||
void qmp_block_job_set_speed(const char *device, int64_t value, Error **errp)
|
||||
{
|
||||
BlockJob *job = find_block_job(device);
|
||||
|
||||
if (!job) {
|
||||
error_set(errp, QERR_DEVICE_NOT_ACTIVE, device);
|
||||
return;
|
||||
}
|
||||
|
||||
if (block_job_set_speed(job, value) < 0) {
|
||||
error_set(errp, QERR_NOT_SUPPORTED);
|
||||
}
|
||||
}
|
||||
|
@ -81,6 +81,20 @@ STEXI
|
||||
@item block_stream
|
||||
@findex block_stream
|
||||
Copy data from a backing file into a block device.
|
||||
ETEXI
|
||||
|
||||
{
|
||||
.name = "block_job_set_speed",
|
||||
.args_type = "device:B,value:o",
|
||||
.params = "device value",
|
||||
.help = "set maximum speed for a background block operation",
|
||||
.mhandler.cmd = hmp_block_job_set_speed,
|
||||
},
|
||||
|
||||
STEXI
|
||||
@item block_job_set_stream
|
||||
@findex block_job_set_stream
|
||||
Set maximum speed for a background block operation.
|
||||
ETEXI
|
||||
|
||||
{
|
||||
|
11
hmp.c
11
hmp.c
@ -794,3 +794,14 @@ void hmp_block_stream(Monitor *mon, const QDict *qdict)
|
||||
|
||||
hmp_handle_error(mon, &error);
|
||||
}
|
||||
|
||||
void hmp_block_job_set_speed(Monitor *mon, const QDict *qdict)
|
||||
{
|
||||
Error *error = NULL;
|
||||
const char *device = qdict_get_str(qdict, "device");
|
||||
int64_t value = qdict_get_int(qdict, "value");
|
||||
|
||||
qmp_block_job_set_speed(device, value, &error);
|
||||
|
||||
hmp_handle_error(mon, &error);
|
||||
}
|
||||
|
1
hmp.h
1
hmp.h
@ -55,5 +55,6 @@ void hmp_eject(Monitor *mon, const QDict *qdict);
|
||||
void hmp_change(Monitor *mon, const QDict *qdict);
|
||||
void hmp_block_set_io_throttle(Monitor *mon, const QDict *qdict);
|
||||
void hmp_block_stream(Monitor *mon, const QDict *qdict);
|
||||
void hmp_block_job_set_speed(Monitor *mon, const QDict *qdict);
|
||||
|
||||
#endif
|
||||
|
@ -1465,3 +1465,25 @@
|
||||
# Since: 1.1
|
||||
##
|
||||
{ 'command': 'block_stream', 'data': { 'device': 'str', '*base': 'str' } }
|
||||
|
||||
##
|
||||
# @block_job_set_speed:
|
||||
#
|
||||
# Set maximum speed for a background block operation.
|
||||
#
|
||||
# This command can only be issued when there is an active block job.
|
||||
#
|
||||
# Throttling can be disabled by setting the speed to 0.
|
||||
#
|
||||
# @device: the device name
|
||||
#
|
||||
# @value: the maximum speed, in bytes per second
|
||||
#
|
||||
# Returns: Nothing on success
|
||||
# If the job type does not support throttling, NotSupported
|
||||
# If streaming is not active on this device, DeviceNotActive
|
||||
#
|
||||
# Since: 1.1
|
||||
##
|
||||
{ 'command': 'block_job_set_speed',
|
||||
'data': { 'device': 'str', 'value': 'int' } }
|
||||
|
@ -654,6 +654,12 @@ EQMP
|
||||
.mhandler.cmd_new = qmp_marshal_input_block_stream,
|
||||
},
|
||||
|
||||
{
|
||||
.name = "block_job_set_speed",
|
||||
.args_type = "device:B,value:o",
|
||||
.mhandler.cmd_new = qmp_marshal_input_block_job_set_speed,
|
||||
},
|
||||
|
||||
{
|
||||
.name = "blockdev-snapshot-sync",
|
||||
.args_type = "device:B,snapshot-file:s,format:s?",
|
||||
|
Loading…
Reference in New Issue
Block a user