X-Git-Url: http://git.linux-vserver.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=scripts%2Fvserver.functions;h=d10ccf27bf526d227d4d3f288e6db2d872ed1b8a;hb=0af41ded5e696a012f94e0903d34ae331fe821e6;hp=c40f95f62da5773d80d6ea522399adc75e0ad20d;hpb=a4849e1f0e19b9d35da76500376bf5ffd92ea463;p=util-vserver.git diff --git a/scripts/vserver.functions b/scripts/vserver.functions index c40f95f..d10ccf2 100644 --- a/scripts/vserver.functions +++ b/scripts/vserver.functions @@ -206,6 +206,13 @@ function _generateBCapabilityOptions _readFileToArray "$vdir"/bcapabilities OPTS_VATTRIBUTE --bcap } +function _generateUMaskOptions +{ + local vdir=$1 + + _readFileToArray "$vdir"/umask OPTS_VATTRIBUTE --umask +} + function _generateCapabilityOptions { local vdir=$1 @@ -442,6 +449,7 @@ function _generateChcontextOptions _generateCapabilityOptions "$vdir" _generateFlagOptions "$vdir" + _generateUMaskOptions "$vdir" CHCONTEXT_OPTS=( $SILENT_OPT \ "${CHCONTEXT_FLAG_OPTS[@]}" \ @@ -762,7 +770,11 @@ function disableInterfaces IP_ADDR_FLUSH) ;; IP_LINK) ;; ## Ignore the link-down command for now IP_ROUTE) $_IP route del "$@";; - TUNCTL) $_TUNCTL --~persist "$1";; + TUNCTL) + local dev="$1" + shift + $_TUNCTL --~persist "$@" "$dev" + ;; *) echo "Unknown interface-command type '$type'" >&2; false;; esac done @@ -1484,8 +1496,19 @@ function _generateCgroupOptions function useCgroup { hasCgroup || return 1 - test -e "$CGROUP_MNT/tasks" || return 1 - memcg="" + if test -n "$CGROUP_MNT_PER_SS"; then + local existing=0 + local ss + for ss in "${CGROUP_SUBSYS[@]}"; do + if test -e "$CGROUP_MNT/$ss/tasks"; then + let existing=${existing}+1 + fi + done + test "$existing" -gt 0 || return 1 + else + test -e "$CGROUP_MNT/tasks" || return 1 + fi + local memcg="" if $_VSERVER_INFO - FEATURE memcg; then memcg=1 fi @@ -1518,13 +1541,14 @@ function _handleCgroup if test -n "$CGROUP_MNT_PER_SS"; then mnts=() - for ss in $($_SED '/^#/d;/^ns[[:space:]]/d;s/[[:space:]].*//' /proc/cgroups); do + for ss in "${CGROUP_SUBSYS[@]}"; do mnts=( "${mnts[@]}" "$CGROUP_MNT/$ss" ) done else mnts=( "$CGROUP_MNT" ) fi for mnt in "${mnts[@]}"; do + test -d "$mnt" || continue if test "$action" = "attach"; then if test -n "$CGROUP_BASE"; then local -a dirs=() @@ -1556,8 +1580,13 @@ function _handleCgroup for i in "$dir"/*; do f="${i##*/}" test "$f" != mnt -a "$f" != subsys -a \ - "$f" != inherit -a "$f" != name -a "$f" != base \ + "$f" != inherit -a "$f" != name -a "$f" != base -a \ + "$f" != per-ss \ || continue + if test -n "$CGROUP_MNT_PER_SS"; then + ss="${f%%.*}" + test "$ss" = "${mnt##*/}" || continue + fi cat "$i" > "$mnt/$CGROUP_BASE$name/$f" done fi