assume that /sys/fs/cgroup is always per_ss=1
[util-vserver.git] / scripts / vserver.functions
index e825271..95ada0d 100644 (file)
@@ -843,7 +843,7 @@ function prepareInit
     pushd "$1/vdir" >/dev/null
     case "$INITSTYLE" in
        sysv)
-           local -a dirs=( $($_CHROOT_SH realpath /var/run /var/lock || :) )
+           local -a dirs=( $($_CHROOT_SH realpath /var/run /var/lock | $_SED 's!^/*!!' || :) )
            local dir
            for dir in "${dirs[@]}"; do
                $_FIND $dir ! -type d -print0 | xargs -0r $_CHROOT_SH rm
@@ -1416,11 +1416,19 @@ function _namespaceCleanup
        done
     done
 
+    # keep cgroup mount points
+    list=( "${list[@]}" "${CGROUP_MNT}" )
+    if test -n "$CGROUP_MNT_PER_SS"; then
+        for ss in "${CGROUP_SUBSYS[@]}"; do
+            list=( "${list[@]}" "${CGROUP_MNT}/${ss}" )
+        done
+    fi
+
     local -a list_umount
     while read -r dev path opts; do
        test -n "$path" || continue
-       for i in "$root" /dev /proc; do
-           path_dir="${path}/"
+       path_dir="${path}/"
+       for i in "$root" /dev /proc /sys; do
            test "${path_dir#${i}/}" != "${path_dir}" && continue 2
        done
        for i in "${list[@]}" /; do
@@ -1474,15 +1482,18 @@ function _generateCgroupOptions
 
     hasCgroup || return 0
 
-    findFile file "$__CONFDIR/.defaults/cgroup/mnt" ""
-    if test -n "$file"; then
-       read CGROUP_MNT < "$file"
-    fi
     findFile file "$__CONFDIR/.defaults/cgroup/subsys" ""
     if test -n "$file"; then
        _readFileToArray CGROUP_SUBSYS "$file"
     else
-       CGROUP_SUBSYS=( $($_SED '/^#/d;/^ns[[:space:]]/d;s/[[:space:]].*//' /proc/cgroups) )
+       CGROUP_SUBSYS=( $($_AWK '/^#/ { next; } $1 == "ns" { next; } $4 != "0" { print $1; }' /proc/cgroups) )
+    fi
+    findFile file "$__CONFDIR/.defaults/cgroup/mnt" ""
+    if test -n "$file"; then
+       read CGROUP_MNT < "$file"
+    elif test -d /sys/fs/cgroup; then
+       CGROUP_MNT=/sys/fs/cgroup
+       CGROUP_MNT_PER_SS=1
     fi
     findFile file "$__CONFDIR/.defaults/cgroup/inherit" ""
     if test -n "$file"; then