Add the virFileCache implementation for nbdkit capabilities to the qemu
driver. This allows us to determine whether nbdkit is installed and
which plugins are supported. it also has persistent caching and the
capabilities are re-queried whenever something changes.
Signed-off-by: Jonathon Jongsma <jjongsma(a)redhat.com>
---
src/qemu/qemu_conf.h | 3 +++
src/qemu/qemu_driver.c | 4 ++++
2 files changed, 7 insertions(+)
diff --git a/src/qemu/qemu_conf.h b/src/qemu/qemu_conf.h
index a39510b0b1..95c05e6888 100644
--- a/src/qemu/qemu_conf.h
+++ b/src/qemu/qemu_conf.h
@@ -320,6 +320,9 @@ struct _virQEMUDriver {
/* Immutable pointer, self-locking APIs */
virHashAtomic *migrationErrors;
+
+ /* Immutable pointer, self-locking APIs */
+ virFileCache *nbdkitCapsCache;
};
virQEMUDriverConfig *virQEMUDriverConfigNew(bool privileged,
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index 59a3b37b98..d42f3c2d2a 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -833,6 +833,9 @@ qemuStateInitialize(bool privileged,
defsecmodel)))
goto error;
+ /* find whether nbdkit is available and query its capabilities */
+ qemu_driver->nbdkitCapsCache = qemuNbdkitCapsCacheNew(cfg->cacheDir);
+
/* If hugetlbfs is present, then we need to create a sub-directory within
* it, since we can't assume the root mount point has permissions that
* will let our spawned QEMU instances use it. */
@@ -1070,6 +1073,7 @@ qemuStateCleanup(void)
VIR_FREE(qemu_driver->qemuImgBinary);
virObjectUnref(qemu_driver->domains);
virThreadPoolFree(qemu_driver->workerPool);
+ virObjectUnref(qemu_driver->nbdkitCapsCache);
if (qemu_driver->lockFD != -1)
virPidFileRelease(qemu_driver->config->stateDir, "driver",
qemu_driver->lockFD);
--
2.37.3