}
#if WITH_FUSE
-static int lxcContainerMountProcFuse(virDomainDefPtr def)
+static int lxcContainerMountProcFuse(virDomainDefPtr def,
+ const char *stateDir)
{
int ret;
char *meminfo_path = NULL;
+ VIR_DEBUG("Mount /proc/meminfo stateDir=%s", stateDir);
+
if ((ret = virAsprintf(&meminfo_path,
"/.oldroot/%s/%s.fuse/meminfo",
- LXC_STATE_DIR,
+ stateDir,
def->name)) < 0)
return ret;
return ret;
}
#else
-static int lxcContainerMountProcFuse(virDomainDefPtr def ATTRIBUTE_UNUSED)
+static int lxcContainerMountProcFuse(virDomainDefPtr def ATTRIBUTE_UNUSED,
+ const char *stateDir ATTRIBUTE_UNUSED)
{
return 0;
}
#endif
-static int lxcContainerMountFSDevPTS(virDomainDefPtr def)
+static int lxcContainerMountFSDevPTS(virDomainDefPtr def,
+ const char *stateDir)
{
int ret;
char *path = NULL;
+ VIR_DEBUG("Mount /dev/pts stateDir=%s", stateDir);
+
if ((ret = virAsprintf(&path,
"/.oldroot/%s/%s.devpts",
- LXC_STATE_DIR,
+ stateDir,
def->name)) < 0)
return ret;
int rc;
int ret = -1;
char *sec_mount_options;
+ char *stateDir = NULL;
if (!(sec_mount_options = virSecurityManagerGetMountOptions(securityDriver, vmDef)))
return -1;
goto cleanup;
}
+ if (virFileResolveAllLinks(LXC_STATE_DIR, &stateDir) < 0)
+ goto cleanup;
+
/* Ensure the root filesystem is mounted */
if (lxcContainerPrepareRoot(vmDef, root) < 0)
goto cleanup;
goto cleanup;
/* Mounts /proc/meminfo etc sysinfo */
- if (lxcContainerMountProcFuse(vmDef) < 0)
+ if (lxcContainerMountProcFuse(vmDef, stateDir) < 0)
goto cleanup;
/* Now we can re-mount the cgroups controllers in the
goto cleanup;
/* Mounts /dev/pts */
- if (lxcContainerMountFSDevPTS(vmDef) < 0)
+ if (lxcContainerMountFSDevPTS(vmDef, stateDir) < 0)
goto cleanup;
/* Populates device nodes in /dev/ */
ret = 0;
cleanup:
+ VIR_FREE(stateDir);
virCgroupFree(&cgroup);
VIR_FREE(sec_mount_options);
return ret;