qemu: Separate out hugepages basedir making

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@redhat.com>
Reviewed-by: Erik Skultety <eskultet@redhat.com>
This commit is contained in:
Michal Privoznik 2022-10-11 16:41:35 +02:00
parent e7d6f2d958
commit 72adf3b717
3 changed files with 31 additions and 16 deletions

View File

@ -1576,3 +1576,30 @@ qemuGetMemoryBackingPath(virQEMUDriver *driver,
*memPath = g_strdup_printf("%s/%s", domainPath, alias);
return 0;
}
int
qemuHugepageMakeBasedir(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;
}

View File

@ -359,3 +359,6 @@ int qemuGetMemoryBackingPath(virQEMUDriver *driver,
const virDomainDef *def,
const char *alias,
char **memPath);
int qemuHugepageMakeBasedir(virQEMUDriver *driver,
virHugeTLBFS *hugepage);

View File

@ -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 (qemuHugepageMakeBasedir(qemu_driver, &cfg->hugetlbfs[i]) < 0)
goto error;
}