From: Peter Krempa Date: Mon, 3 Sep 2018 12:45:16 +0000 (+0200) Subject: qemu: monitor: Add APIs for 'blockdev-create' X-Git-Tag: v5.6.0-rc1~160 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=aa7d73134fdcb7411967061f834ca1d0d8bfe79c;p=thirdparty%2Flibvirt.git qemu: monitor: Add APIs for 'blockdev-create' The 'blockdev-create' starts a job which creates a storage volume using the given protocol or formats an existing (added) volume with one of the supported storage formats. This patch adds the monitor interaction bits. Signed-off-by: Peter Krempa Reviewed-by: Ján Tomko --- diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c index 433fe7e60e..5ad66d1dca 100644 --- a/src/qemu/qemu_monitor.c +++ b/src/qemu/qemu_monitor.c @@ -4419,6 +4419,36 @@ qemuMonitorSetWatchdogAction(qemuMonitorPtr mon, } +/** + * qemuMonitorBlockdevCreate: + * @mon: monitor object + * @jobname: name of the job + * @props: JSON object describing the blockdev to add + * + * Instructs qemu to create/format a new stroage or format layer. Note that + * the job does not add the created/formatted image into qemu and + * qemuMonitorBlockdevAdd needs to be called separately with corresponding + * arguments. Note that the arguments for creating and adding are different. + * + * Note that @props is always consumed by this function and should not be + * accessed after calling this function. + */ +int +qemuMonitorBlockdevCreate(qemuMonitorPtr mon, + const char *jobname, + virJSONValuePtr props) +{ + VIR_DEBUG("jobname=%s props=%p", jobname, props); + + QEMU_CHECK_MONITOR_GOTO(mon, error); + + return qemuMonitorJSONBlockdevCreate(mon, jobname, props); + + error: + virJSONValueFree(props); + return -1; +} + /** * qemuMonitorBlockdevAdd: * @mon: monitor object diff --git a/src/qemu/qemu_monitor.h b/src/qemu/qemu_monitor.h index fa8f8a6e47..88c9702530 100644 --- a/src/qemu/qemu_monitor.h +++ b/src/qemu/qemu_monitor.h @@ -1290,6 +1290,10 @@ virJSONValuePtr qemuMonitorQueryNamedBlockNodes(qemuMonitorPtr mon); int qemuMonitorSetWatchdogAction(qemuMonitorPtr mon, const char *action); +int qemuMonitorBlockdevCreate(qemuMonitorPtr mon, + const char *jobname, + virJSONValuePtr props); + int qemuMonitorBlockdevAdd(qemuMonitorPtr mon, virJSONValuePtr props); diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c index 73eb0f77cb..f19dced014 100644 --- a/src/qemu/qemu_monitor_json.c +++ b/src/qemu/qemu_monitor_json.c @@ -8638,6 +8638,32 @@ qemuMonitorJSONSetWatchdogAction(qemuMonitorPtr mon, } +int +qemuMonitorJSONBlockdevCreate(qemuMonitorPtr mon, + const char *jobname, + virJSONValuePtr props) +{ + VIR_AUTOPTR(virJSONValue) cmd = NULL; + VIR_AUTOPTR(virJSONValue) reply = NULL; + + cmd = qemuMonitorJSONMakeCommand("blockdev-create", + "s:job-id", jobname, + "a:options", &props, + NULL); + virJSONValueFree(props); + if (!cmd) + return -1; + + if (qemuMonitorJSONCommand(mon, cmd, &reply) < 0) + return -1; + + if (qemuMonitorJSONCheckError(cmd, reply) < 0) + return -1; + + return 0; +} + + int qemuMonitorJSONBlockdevAdd(qemuMonitorPtr mon, virJSONValuePtr props) diff --git a/src/qemu/qemu_monitor_json.h b/src/qemu/qemu_monitor_json.h index 89eb554f1d..61e64e831b 100644 --- a/src/qemu/qemu_monitor_json.h +++ b/src/qemu/qemu_monitor_json.h @@ -581,6 +581,11 @@ int qemuMonitorJSONSetWatchdogAction(qemuMonitorPtr mon, const char *action) ATTRIBUTE_NONNULL(1); +int qemuMonitorJSONBlockdevCreate(qemuMonitorPtr mon, + const char *jobname, + virJSONValuePtr props) + ATTRIBUTE_NONNULL(1); + int qemuMonitorJSONBlockdevAdd(qemuMonitorPtr mon, virJSONValuePtr props) ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);