During its initialization, the QEMU driver iterates over
hugetlbfs mount points, creating the driver specific path in each
of them ($prefix/libvirt/qemu). This path is created with very
wide mode (0777) because per-domain directories are then created
under it.
Separate this code into a function so that it can be re-used.
Signed-off-by: Michal Privoznik <mprivozn(a)redhat.com>
---
src/qemu/qemu_conf.c | 27 +++++++++++++++++++++++++++
src/qemu/qemu_conf.h | 3 +++
src/qemu/qemu_driver.c | 17 +----------------
3 files changed, 31 insertions(+), 16 deletions(-)
diff --git a/src/qemu/qemu_conf.c b/src/qemu/qemu_conf.c
index 4f59e5fb07..c20fec26ba 100644
--- a/src/qemu/qemu_conf.c
+++ b/src/qemu/qemu_conf.c
@@ -1576,3 +1576,30 @@ qemuGetMemoryBackingPath(virQEMUDriver *driver,
*memPath = g_strdup_printf("%s/%s", domainPath, alias);
return 0;
}
+
+
+int
+qemuMkdirBaseHugepage(virQEMUDriver *driver,
+ virHugeTLBFS *hugepage)
+{
+
+ g_autofree char *hugepagePath = NULL;
+
+ hugepagePath = qemuGetBaseHugepagePath(driver, hugepage);
+
+ if (!hugepagePath)
+ return -1;
+
+ if (g_mkdir_with_parents(hugepagePath, 0777) < 0) {
+ virReportSystemError(errno,
+ _("unable to create hugepage path %s"),
+ hugepagePath);
+ return -1;
+ }
+
+ if (driver->privileged &&
+ virFileUpdatePerm(hugepage->mnt_dir, 0, S_IXGRP | S_IXOTH) < 0)
+ return -1;
+
+ return 0;
+}
diff --git a/src/qemu/qemu_conf.h b/src/qemu/qemu_conf.h
index c40c452f58..f9314e23a3 100644
--- a/src/qemu/qemu_conf.h
+++ b/src/qemu/qemu_conf.h
@@ -359,3 +359,6 @@ int qemuGetMemoryBackingPath(virQEMUDriver *driver,
const virDomainDef *def,
const char *alias,
char **memPath);
+
+int qemuMkdirBaseHugepage(virQEMUDriver *driver,
+ virHugeTLBFS *hugepage);
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index 40d23b5723..744661f0f7 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -837,22 +837,7 @@ qemuStateInitialize(bool privileged,
* it, since we can't assume the root mount point has permissions that
* will let our spawned QEMU instances use it. */
for (i = 0; i < cfg->nhugetlbfs; i++) {
- g_autofree char *hugepagePath = NULL;
-
- hugepagePath = qemuGetBaseHugepagePath(qemu_driver, &cfg->hugetlbfs[i]);
-
- if (!hugepagePath)
- goto error;
-
- if (g_mkdir_with_parents(hugepagePath, 0777) < 0) {
- virReportSystemError(errno,
- _("unable to create hugepage path %s"),
- hugepagePath);
- goto error;
- }
- if (privileged &&
- virFileUpdatePerm(cfg->hugetlbfs[i].mnt_dir,
- 0, S_IXGRP | S_IXOTH) < 0)
+ if (qemuMkdirBaseHugepage(qemu_driver, &cfg->hugetlbfs[i]) < 0)
goto error;
}
--
2.35.1