@@ -3783,10 +3783,13 @@ out:
aio_context_release(aio_context);
}
-void qmp_block_job_pause(const char *device, Error **errp)
+void qmp_block_job_pause(bool has_id, const char *id,
+ bool has_device, const char *device, Error **errp)
{
AioContext *aio_context;
- BlockJob *job = find_block_job(NULL, device, &aio_context, errp);
+ BlockJob *job = find_block_job(has_id ? id : NULL,
+ has_device ? device : NULL,
+ &aio_context, errp);
if (!job || job->user_paused) {
return;
@@ -1515,7 +1515,7 @@ void hmp_block_job_pause(Monitor *mon, const QDict *qdict)
Error *error = NULL;
const char *device = qdict_get_str(qdict, "device");
- qmp_block_job_pause(device, &error);
+ qmp_block_job_pause(false, NULL, true, device, &error);
hmp_handle_error(mon, &error);
}
@@ -1537,14 +1537,19 @@
# the operation is actually paused. Cancelling a paused job automatically
# resumes it.
#
-# @device: the device name
+# The job must be identified with the @id or @device parameters, but
+# only one of them must be set.
+#
+# @id: #optional the job identifier. (Since 2.7)
+#
+# @device: #optional the device name
#
# Returns: Nothing on success
# If no background operation is active on this device, DeviceNotActive
#
# Since: 1.3
##
-{ 'command': 'block-job-pause', 'data': { 'device': 'str' } }
+{ 'command': 'block-job-pause', 'data': { '*id': 'str', '*device': 'str' } }
##
# @block-job-resume:
@@ -1295,7 +1295,7 @@ EQMP
},
{
.name = "block-job-pause",
- .args_type = "device:B",
+ .args_type = "id:s?,device:B?",
.mhandler.cmd_new = qmp_marshal_block_job_pause,
},
{
This patch allows the 'block-job-pause' command to identify the job by either its ID or its device name. The latter becomes now optional since the ID alone is enough to identify the job. The HMP 'block_job_pause' command remains unchanged. Signed-off-by: Alberto Garcia <berto@igalia.com> --- blockdev.c | 7 +++++-- hmp.c | 2 +- qapi/block-core.json | 9 +++++++-- qmp-commands.hx | 2 +- 4 files changed, 14 insertions(+), 6 deletions(-)