[libvirt] [PATCH v5 6/6] Mount fuse's meminfo file to container's /proc/meminfo

Daniel P. Berrange berrange at redhat.com
Fri Nov 2 14:12:16 UTC 2012


On Thu, Oct 25, 2012 at 06:38:27PM +0800, Gao feng wrote:
> 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: Gao feng <gaofeng at cn.fujitsu.com>
> ---
>  src/lxc/lxc_container.c |   38 ++++++++++++++++++++++++++++++++++++++
>  1 files changed, 38 insertions(+), 0 deletions(-)
> 
> diff --git a/src/lxc/lxc_container.c b/src/lxc/lxc_container.c
> index 2789c17..e8fdb37 100644
> --- a/src/lxc/lxc_container.c
> +++ b/src/lxc/lxc_container.c
> @@ -595,6 +595,36 @@ cleanup:
>      return rc;
>  }
>  
> +#if HAVE_FUSE
> +static int lxcContainerMountProcFuse(virDomainDefPtr def,
> +                                     const char *srcprefix)
> +{
> +    int ret = 0;
> +    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)
>  {
> @@ -1550,6 +1580,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,
> @@ -1640,6 +1674,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,

ACK

Daniel
-- 
|: http://berrange.com      -o-    http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org              -o-             http://virt-manager.org :|
|: http://autobuild.org       -o-         http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org       -o-       http://live.gnome.org/gtk-vnc :|




More information about the libvir-list mailing list