Unmount the hierarchy too.
[util-vserver.git] / sysv / util-vserver
index d56dadc..f6081e7 100755 (executable)
@@ -32,7 +32,7 @@ function set_helper()
 function kill_contexts()
 {
     local xid
-    for xid in `ls -1 /proc/virtual`; do
+    for xid in `ls -1 /proc/virtual 2>/dev/null`; do
        test "$xid" = "info" -o "$xid" = "status" && continue
        $_VATTRIBUTE --xid $xid --set --flag ~persistent
        $_VKILL --xid $xid -s 15
@@ -40,7 +40,7 @@ function kill_contexts()
        $_VKILL --xid $xid -s 9
     done
     local alive=0
-    for xid in `ls -1 /proc/virtual`; do
+    for xid in `ls -1 /proc/virtual 2>/dev/null`; do
        test "$xid" = "info" -o "$xid" = "status" && continue
        let alive+=1
     done
@@ -52,6 +52,21 @@ function create_dirs()
     $_MKDIR -p "$__RUNDIR" && $_MKDIR -p "$__VSHELPERSTATEDIR" && $_MKDIR -p `$_READLINK "$__PKGSTATEREVDIR"`
 }
 
+function mount_cgroup()
+{
+    _generateCgroupOptions
+    test -n "$CGROUP_MNT" || return 0
+    $_MKDIR -p "$CGROUP_MNT"
+    $_MOUNT -t cgroup -o "$CGROUP_SUBSYS" vserver "$CGROUP_MNT"
+}
+
+function umount_cgroup()
+{
+    _generateCgroupOptions
+    test -n "$CGROUP_MNT" || return 0
+    $_UMOUNT "$CGROUP_MNT"
+}
+
 function start()
 {
     _beginResult $"Creating required directories"
@@ -64,6 +79,11 @@ function start()
     _beginResult $"Loading default device map"
     handleDeviceMap --set 0 "$__CONFDIR/.defaults/apps/vdevmap"
     _endResult $?
+    if hasCgroup; then
+       _beginResult $"Mounting cgroup-hierarchy"
+       mount_cgroup
+       _endResult $?
+    fi
     test "$retval" -ne 0 || touch "$lockfile"
     return $retval
 }
@@ -78,6 +98,11 @@ function stop()
     kill_contexts
     _endResult $?
     local retval=$?
+    if hasCgroup; then
+       _beginResult $"Unmounting cgroup-hierarchy"
+       umount_cgroup
+       _endResult $?
+    fi
     $_RM -f "$lockfile"
     return $retval
 }