If ns cgroup is mounted, then when lxc-unshare runs, the kernel automatically
creates a new cgroup for the task.  So lxc-unshare tries to delete it.  But
if ns cgroup is not mounted, that cgroup does not get created, and now
lxc-unshare spits an error.
Author: Serge Hallyn <[email protected]>
Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/lxc/+bug/819319
Forwarded: no

Index: lxc/src/lxc/cgroup.c
===================================================================
--- lxc.orig/src/lxc/cgroup.c   2011-08-01 10:22:53.319598290 -0500
+++ lxc/src/lxc/cgroup.c        2011-08-01 10:55:00.349641606 -0500
@@ -82,6 +82,13 @@
        return -1;
 }
 
+int lxc_ns_is_mounted(void)
+{
+       static char        buf[MAXPATHLEN];
+
+       return (get_cgroup_mount("ns", buf) == 0);
+}
+
 static int get_cgroup_flags(struct mntent *mntent)
 {
        int flags = 0;
Index: lxc/src/lxc/cgroup.h
===================================================================
--- lxc.orig/src/lxc/cgroup.h   2011-08-01 10:22:54.149598308 -0500
+++ lxc/src/lxc/cgroup.h        2011-08-01 10:54:52.889641439 -0500
@@ -30,4 +30,5 @@
 int lxc_cgroup_destroy(const char *name);
 int lxc_cgroup_path_get(char **path, const char *subsystem, const char *name);
 int lxc_cgroup_nrtasks(const char *name);
+int lxc_ns_is_mounted(void);
 #endif
Index: lxc/src/lxc/lxc_unshare.c
===================================================================
--- lxc.orig/src/lxc/lxc_unshare.c      2011-08-01 10:17:52.189591521 -0500
+++ lxc/src/lxc/lxc_unshare.c   2011-08-01 11:06:54.889657669 -0500
@@ -210,12 +210,14 @@
                return -1;
        }
 
-       if (asprintf(&pid_name, "%d", pid) == -1) {
-               ERROR("pid_name: failed to allocate memory");
-               return -1;
+       if (lxc_ns_is_mounted()) {
+               if (asprintf(&pid_name, "%d", pid) == -1) {
+                       ERROR("pid_name: failed to allocate memory");
+                       return -1;
+               }
+               lxc_cgroup_destroy(pid_name);
+               free(pid_name);
        }
-       lxc_cgroup_destroy(pid_name);
-       free(pid_name);
 
        return  lxc_error_set_and_log(pid, status);
 }

------------------------------------------------------------------------------
BlackBerry&reg; DevCon Americas, Oct. 18-20, San Francisco, CA
The must-attend event for mobile developers. Connect with experts. 
Get tools for creating Super Apps. See the latest technologies.
Sessions, hands-on labs, demos & much more. Register early & save!
http://p.sf.net/sfu/rim-blackberry-1
_______________________________________________
Lxc-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/lxc-users

Reply via email to