~serge-hallyn/ubuntu/quantal/lxc/lxc-fixapi

« back to all changes in this revision

Viewing changes to debian/patches/0023-set-clone-children-earlier.patch

  • Committer: Package Import Robot
  • Author(s): Serge Hallyn
  • Date: 2012-04-26 15:18:35 UTC
  • mfrom: (3.1.41 sid)
  • Revision ID: package-import@ubuntu.com-20120426151835-3vz6kb4m90gb26js
Tags: 0.8.0~rc1-4ubuntu1
* Merge from unstable.  Remaining changes:
  - control:
    - update maintainer
    - Build-Depends: add dh-apparmor and libapparmor-dev
    - lxc Depends: add bridge-utils, dnsmasq-base, iptables, rsync
    - lxc Recommends: add cgroup-lite | cgroup-bin, openssl
    - lxc Suggests: add btrfs-tools, lvm2, qemu-user-static
    - lxc Conflicts: remove (cgroup-bin)
  - Add lxc-start-ephemeral and lxc-wait to debian/local
  - apparmor:
    - add lxc.apparmor, lxc-containers.apparmor,
      lxc-default.apparmor, and new lxc.apparmor.in
  - add debian/lxc.conf (default container creation config file)
  - debian/lxc.install.in:
    * add lxc-start-ephemeral
    * add debian/lxc.conf
    * skip lxc-debconf*
    * skip lxc-ls (Use upstream's)
  - debian/lxc*.install.in: use '*', not @DEB_HOST_MULTIARCH@
  - Use our own completely different lxc.postinst and lxc.postrm
  - remove lxc.templates
  - debian/rules:
    * add DEB_DH_INSTALLINIT_ARGS = --upstart-only
    * don't do debconf stuff
    * add debian/*.apparmor.in to files processed under
      override_dh_auto_clean
    * don't comment out ubuntu or busybox templates
    * do apparmor stuff and install our own lxc-wait under override_dh_install
    * install our upstart scripts in override_dh_installinit
  - add lxc.default, lxc.lxc-net.upstart, lxc.upstart under
    debian/

* patches kept:
  - 0013-lxc-create-use-default-config.patch (needed manual rebase)
  - 0030-ubuntu-template-fail.patch
  - 0031-ubuntu-template-resolvconf.patch
  - 0044-lxc-destroy-rm-autos
  - debian/patches/0045-fix-other-templates
  - debian/patches/0046-lxc-clone-change-hwaddr
  - debian/patches/0047-bindhome-check-shell
  - debian/patches/0049-ubuntu-template-sudo-and-cleanup
  - debian/patches/0050-clone-lvm-sizes
  - debian/patches/0052-ubuntu-bind-user-conflict
  - debian/patches/0053-lxc-start-pin-rootfs
  - debian/patches/0054-ubuntu-debug
  - debian/patches/0055-ubuntu-handle-badgrp
  - debian/patches/0056-dont-watch-utmp
  - debian/patches/0057-update-manpages
  - debian/patches/0058-fixup-ubuntu-cloud
  - debian/patches/0059-reenable-daily-cloudimg
  - debian/patches/0060-lxc-shutdown
  - debian/patches/0061-lxc-start-apparmor
  - debian/patches/0062-templates-relative-paths
  - debian/patches/0063-check-apparmor-enabled
  - debian/patches/0064-apparmor-mount-proc
  - debian/patches/0065-fix-bindhome-relpath
  - debian/patches/0066-confile-typo
  - debian/patches/0067-templates-lxc-profile
  - debian/patches/0068-fix-lxc-config-layout 
  - debian/patches/0069-ubuntu-cloud-fix
  - debian/patches/0070-templates-rmdir-dev-shm
  - debian/patches/0071-ubuntu-cloud-fix-image-extraction
  - debian/patches/0072-lxc-shutdown-help
  - debian/patches/0073-lxc-destroy-waits-before-destroy
  - mark all patches which have been forwarded as such, refresh all
* 0074-lxc-execute-find-init: lxc-init had moved.  Introduce a function in
  lxc-execute to go find it.  Otherwise lxc-execute for any older releases
  will fail.
* 0075-lxc-ls-bash: lxc-ls needs bash, not sh
* add debian/lxc.apparmor.in so DEB_HOST_MULTIARCH can be expanded
* 0076-fix-sprintfs:  - check return values for all sprintfs and snprintfs
  which could overflow (LP: #988918)
* 0077-execute-without-rootfs: let lxc-execute succeed with no rootfs
  (LP: #981955)

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
Description: set clone_children on init's cgroup, not on <init's cgroup>/lxc
2
 
 Not doing so is causing containers to not be reclassified for cpusets.
3
 
 This needs to be forwarded upstream but has not yet been.
4
 
Author: Serge Hallyn <serge.hallyn@ubuntu.com>
5
 
Forwarded: yes
6
 
Index: lxc/src/lxc/cgroup.c
7
 
===================================================================
8
 
--- lxc.orig/src/lxc/cgroup.c   2012-01-20 09:43:31.374700000 -0600
9
 
+++ lxc/src/lxc/cgroup.c        2012-01-20 11:18:14.655071424 -0600
10
 
@@ -257,17 +257,23 @@
11
 
 static int lxc_one_cgroup_create(const char *name,
12
 
                                 struct mntent *mntent, pid_t pid)
13
 
 {
14
 
-       char cgname[MAXPATHLEN], cgparent[MAXPATHLEN];
15
 
+       char cginit[MAXPATHLEN], cgname[MAXPATHLEN], cgparent[MAXPATHLEN];
16
 
        char clonechild[MAXPATHLEN];
17
 
        char initcgroup[MAXPATHLEN];
18
 
        int flags, ret;
19
 
 
20
 
-       /* cgparent is the parent dir, /sys/fs/cgroup/<init-cgroup>/lxc */
21
 
+       /* cgparent is the parent dir, /sys/fs/cgroup/<cgroup>/<init-cgroup>/lxc */
22
 
        /* (remember get_init_cgroup() returns a path starting with '/') */
23
 
-       /* cgname is the full name,    /sys/fs/cgroup/<init-cgroup>/lxc/name */
24
 
-       ret = snprintf(cgparent, MAXPATHLEN, "%s%s/lxc", mntent->mnt_dir,
25
 
+       /* cgname is the full name,    /sys/fs/cgroup/</cgroup>/<init-cgroup>/lxc/name */
26
 
+       ret = snprintf(cginit, MAXPATHLEN, "%s%s", mntent->mnt_dir,
27
 
                get_init_cgroup(NULL, mntent, initcgroup));
28
 
        if (ret < 0 || ret >= MAXPATHLEN) {
29
 
+               SYSERROR("Failed creating pathname for init's cgroup (%d)\n", ret);
30
 
+               return -1;
31
 
+       }
32
 
+
33
 
+       ret = snprintf(cgparent, MAXPATHLEN, "%s/lxc", cginit);
34
 
+       if (ret < 0 || ret >= MAXPATHLEN) {
35
 
                SYSERROR("Failed creating pathname for cgroup parent (%d)\n", ret);
36
 
                return -1;
37
 
        }
38
 
@@ -277,32 +283,16 @@
39
 
                return -1;
40
 
        }
41
 
 
42
 
-       /* if /sys/fs/cgroup/<init-cgroup>/lxc does not exist, create it */
43
 
-       if (access(cgparent, F_OK) && mkdir(cgparent, 0755)) {
44
 
-               SYSERROR("failed to create '%s' directory", cgparent);
45
 
-               return -1;
46
 
-       }
47
 
-
48
 
-       /*
49
 
-        * There is a previous cgroup.  Try to delete it.  If that fails
50
 
-        * (i.e. it is not empty) try to move it out of the way.
51
 
-        */
52
 
-       if (!access(cgname, F_OK) && rmdir(cgname)) {
53
 
-               if (try_to_move_cgname(cgparent, cgname)) {
54
 
-                       SYSERROR("failed to remove previous cgroup '%s'", cgname);
55
 
-                       return -1;
56
 
-               }
57
 
-       }
58
 
-
59
 
        flags = get_cgroup_flags(mntent);
60
 
 
61
 
-       /* We have the deprecated ns_cgroup subsystem */
62
 
+       /* Do we have the deprecated ns_cgroup subsystem? */
63
 
        if (flags & CGROUP_NS_CGROUP) {
64
 
                WARN("using deprecated ns_cgroup");
65
 
                return cgroup_rename_nsgroup(cgparent, cgname, pid);
66
 
        }
67
 
 
68
 
-       ret = snprintf(clonechild, MAXPATHLEN, "%s/cgroup.clone_children", cgparent);
69
 
+       ret = snprintf(clonechild, MAXPATHLEN, "%s/cgroup.clone_children",
70
 
+                      cginit);
71
 
        if (ret < 0 || ret >= MAXPATHLEN) {
72
 
                SYSERROR("Failed creating pathname for clone_children (%d)\n", ret);
73
 
                return -1;
74
 
@@ -317,12 +307,29 @@
75
 
                return -1;
76
 
        }
77
 
 
78
 
-       /* we enable the clone_children flag of the cgroup */
79
 
+       /* enable the clone_children flag of the cgroup */
80
 
        if (cgroup_enable_clone_children(clonechild)) {
81
 
                SYSERROR("failed to enable 'clone_children flag");
82
 
                return -1;
83
 
        }
84
 
 
85
 
+       /* if /sys/fs/cgroup/<cgroup>/<init-cgroup>/lxc does not exist, create it */
86
 
+       if (access(cgparent, F_OK) && mkdir(cgparent, 0755)) {
87
 
+               SYSERROR("failed to create '%s' directory", cgparent);
88
 
+               return -1;
89
 
+       }
90
 
+
91
 
+       /*
92
 
+        * There is a previous cgroup.  Try to delete it.  If that fails
93
 
+        * (i.e. it is not empty) try to move it out of the way.
94
 
+        */
95
 
+       if (!access(cgname, F_OK) && rmdir(cgname)) {
96
 
+               if (try_to_move_cgname(cgparent, cgname)) {
97
 
+                       SYSERROR("failed to remove previous cgroup '%s'", cgname);
98
 
+                       return -1;
99
 
+               }
100
 
+       }
101
 
+
102
 
        /* Let's create the cgroup */
103
 
        if (mkdir(cgname, 0755)) {
104
 
                SYSERROR("failed to create '%s' directory", cgname);