提交 df33ecdd 编写于 作者: G Gao feng 提交者: Daniel P. Berrange

mount fuse's meminfo file to container's /proc/meminfo

we already have virtualize meminfo for container through fuse filesystem,
add function lxcContainerMountProcFuse to mount this meminfo file to
the container's /proc/meminfo.

So we can isolate container's /proc/meminfo from host now.
Signed-off-by: NGao feng <gaofeng@cn.fujitsu.com>
上级 d671c0ed
......@@ -595,6 +595,36 @@ cleanup:
return rc;
}
#if HAVE_FUSE
static int lxcContainerMountProcFuse(virDomainDefPtr def,
const char *srcprefix)
{
int ret;
char *meminfo_path = NULL;
if ((ret = virAsprintf(&meminfo_path,
"%s/%s/%s/meminfo",
srcprefix, LXC_STATE_DIR,
def->name)) < 0)
return ret;
if ((ret = mount(meminfo_path, "/proc/meminfo",
NULL, MS_BIND, NULL)) < 0) {
virReportSystemError(errno,
_("Failed to mount %s on /proc/meminfo"),
meminfo_path);
}
VIR_FREE(meminfo_path);
return ret;
}
#else
static int lxcContainerMountProcFuse(virDomainDefPtr def ATTRIBUTE_UNUSED,
const char *srcprefix ATTRIBUTE_UNUSED)
{
return 0;
}
#endif
static int lxcContainerMountFSDevPTS(virDomainFSDefPtr root)
{
......@@ -1554,6 +1584,10 @@ static int lxcContainerSetupPivotRoot(virDomainDefPtr vmDef,
if (lxcContainerMountBasicFS(true, sec_mount_options) < 0)
goto cleanup;
/* Mounts /proc/meminfo etc sysinfo */
if (lxcContainerMountProcFuse(vmDef, "/.oldroot") < 0)
goto cleanup;
/* Now we can re-mount the cgroups controllers in the
* same configuration as before */
if (lxcContainerMountCGroups(mounts, nmounts,
......@@ -1650,6 +1684,10 @@ static int lxcContainerSetupExtraMounts(virDomainDefPtr vmDef,
if (lxcContainerMountBasicFS(false, sec_mount_options) < 0)
goto cleanup;
/* Mounts /proc/meminfo etc sysinfo */
if (lxcContainerMountProcFuse(vmDef, "/.oldroot") < 0)
goto cleanup;
/* Now we can re-mount the cgroups controllers in the
* same configuration as before */
if (lxcContainerMountCGroups(mounts, nmounts,
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册