提交 290a00e4 编写于 作者: M Michal Privoznik

qemuDomainBuildNamespace: Handle file mount points

https://bugzilla.redhat.com/show_bug.cgi?id=1431112

Yeah, that's right. A mount point doesn't have to be a directory.
It can be a file too. However, the code that tries to preserve
mount points under /dev for new namespace for qemu does not count
with that option.
Signed-off-by: NMichal Privoznik <mprivozn@redhat.com>
上级 fafe9d7c
...@@ -7741,10 +7741,21 @@ qemuDomainBuildNamespace(virQEMUDriverConfigPtr cfg, ...@@ -7741,10 +7741,21 @@ qemuDomainBuildNamespace(virQEMUDriverConfigPtr cfg,
/* Save some mount points because we want to share them with the host */ /* Save some mount points because we want to share them with the host */
for (i = 0; i < ndevMountsPath; i++) { for (i = 0; i < ndevMountsPath; i++) {
struct stat sb;
if (devMountsSavePath[i] == devPath) if (devMountsSavePath[i] == devPath)
continue; continue;
if (virFileMakePath(devMountsSavePath[i]) < 0) { if (stat(devMountsPath[i], &sb) < 0) {
virReportSystemError(errno,
_("Unable to stat: %s"),
devMountsPath[i]);
goto cleanup;
}
/* At this point, devMountsPath is either a regular file or a directory. */
if ((S_ISDIR(sb.st_mode) && virFileMakePath(devMountsSavePath[i]) < 0) ||
(S_ISREG(sb.st_mode) && virFileTouch(devMountsSavePath[i], sb.st_mode) < 0)) {
virReportSystemError(errno, virReportSystemError(errno,
_("Failed to create %s"), _("Failed to create %s"),
devMountsSavePath[i]); devMountsSavePath[i]);
...@@ -7780,15 +7791,33 @@ qemuDomainBuildNamespace(virQEMUDriverConfigPtr cfg, ...@@ -7780,15 +7791,33 @@ qemuDomainBuildNamespace(virQEMUDriverConfigPtr cfg,
goto cleanup; goto cleanup;
for (i = 0; i < ndevMountsPath; i++) { for (i = 0; i < ndevMountsPath; i++) {
struct stat sb;
if (devMountsSavePath[i] == devPath) if (devMountsSavePath[i] == devPath)
continue; continue;
if (virFileMakePath(devMountsPath[i]) < 0) { if (stat(devMountsSavePath[i], &sb) < 0) {
virReportSystemError(errno, _("Cannot create %s"), virReportSystemError(errno,
devMountsPath[i]); _("Unable to stat: %s"),
devMountsSavePath[i]);
goto cleanup; goto cleanup;
} }
if (S_ISDIR(sb.st_mode)) {
if (virFileMakePath(devMountsPath[i]) < 0) {
virReportSystemError(errno, _("Cannot create %s"),
devMountsPath[i]);
goto cleanup;
}
} else {
if (virFileMakeParentPath(devMountsPath[i]) < 0 ||
virFileTouch(devMountsPath[i], sb.st_mode) < 0) {
virReportSystemError(errno, _("Cannot create %s"),
devMountsPath[i]);
goto cleanup;
}
}
if (virFileMoveMount(devMountsSavePath[i], devMountsPath[i]) < 0) if (virFileMoveMount(devMountsSavePath[i], devMountsPath[i]) < 0)
goto cleanup; goto cleanup;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册