]> xenbits.xensource.com Git - libvirt.git/commitdiff
qemu: domain: Add helper to check block job support
authorPeter Krempa <pkrempa@redhat.com>
Tue, 31 Mar 2015 15:29:35 +0000 (17:29 +0200)
committerPeter Krempa <pkrempa@redhat.com>
Thu, 9 Apr 2015 12:11:42 +0000 (14:11 +0200)
We need to check that qemu supports block jobs in multiple places. Add a
helper to do the check.

src/qemu/qemu_domain.c
src/qemu/qemu_domain.h

index 19d34725d2f7caa988ccf6c890b66c4be24b4573..c18b8647b3506b52f54ca6e3b25156342ff5f005 100644 (file)
@@ -3047,3 +3047,33 @@ qemuDomainGetMonitor(virDomainObjPtr vm)
 {
     return ((qemuDomainObjPrivatePtr) vm->privateData)->mon;
 }
+
+
+/**
+ * qemuDomainSupportsBlockJobs:
+ * @vm: domain object
+ * @modern: pointer to bool that returns whether modern block jobs are supported
+ *
+ * Returns -1 in case when qemu does not support block jobs at all. Otherwise
+ * returns 0 and optionally fills @modern to denote that modern (async) block
+ * jobs are supported.
+ */
+int
+qemuDomainSupportsBlockJobs(virDomainObjPtr vm,
+                            bool *modern)
+{
+    qemuDomainObjPrivatePtr priv = vm->privateData;
+    bool async = virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_BLOCKJOB_ASYNC);
+    bool sync = virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_BLOCKJOB_SYNC);
+
+    if (!sync && !async) {
+        virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+                       _("block jobs not supported with this QEMU binary"));
+        return -1;
+    }
+
+    if (modern)
+        *modern = async;
+
+    return 0;
+}
index fa2e4f9803a2644e2651e98a80b78c12d47e0858..3225abb557776de7c7bc2a2be4e1dce56c14b13e 100644 (file)
@@ -428,6 +428,8 @@ int qemuDomainJobInfoToParams(qemuDomainJobInfoPtr jobInfo,
     ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2)
     ATTRIBUTE_NONNULL(3) ATTRIBUTE_NONNULL(4);
 
+int qemuDomainSupportsBlockJobs(virDomainObjPtr vm, bool *modern)
+    ATTRIBUTE_NONNULL(1);
 bool qemuDomainDiskBlockJobIsActive(virDomainDiskDefPtr disk);
 
 void qemuDomObjEndAPI(virDomainObjPtr *vm);