[libvirt] [PATCH 9/9] qemu: monitor: Add APIs for 'blockdev-create'

Peter Krempa pkrempa at redhat.com
Mon Jun 24 15:54:56 UTC 2019


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 <pkrempa at redhat.com>
---
 src/qemu/qemu_monitor.c      | 30 ++++++++++++++++++++++++++++++
 src/qemu/qemu_monitor.h      |  4 ++++
 src/qemu/qemu_monitor_json.c | 26 ++++++++++++++++++++++++++
 src/qemu/qemu_monitor_json.h |  5 +++++
 4 files changed, 65 insertions(+)

diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c
index 9358d0b1e2..90cd5ea9bd 100644
--- a/src/qemu/qemu_monitor.c
+++ b/src/qemu/qemu_monitor.c
@@ -4418,6 +4418,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 argumetns 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 c6dddd1e9e..aafea6350c 100644
--- a/src/qemu/qemu_monitor.h
+++ b/src/qemu/qemu_monitor.h
@@ -1289,6 +1289,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 04538bc46c..22fbd84e90 100644
--- a/src/qemu/qemu_monitor_json.c
+++ b/src/qemu/qemu_monitor_json.c
@@ -8616,6 +8616,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 a50d4d7b23..00e6b3d68f 100644
--- a/src/qemu/qemu_monitor_json.h
+++ b/src/qemu/qemu_monitor_json.h
@@ -580,6 +580,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);
-- 
2.21.0




More information about the libvir-list mailing list