diff -Nurp util-vserver-0.30.210.orig/configure util-vserver-0.30.210/configure --- util-vserver-0.30.210.orig/configure 2006-07-05 23:05:17.000000000 +0930 +++ util-vserver-0.30.210/configure 2006-07-05 23:33:07.000000000 +0930 @@ -465,7 +465,7 @@ ac_includes_default="\ # include #endif" -ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot AMTAR am__tar am__untar MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT build build_cpu build_vendor build_os host host_cpu host_vendor host_os GPG_KEY CXX CXXFLAGS LDFLAGS CPPFLAGS ac_ct_CXX EXEEXT OBJEXT DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CXXDEPMODE am__fastdepCXX_TRUE am__fastdepCXX_FALSE CC CFLAGS ac_ct_CC CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE LN_S ENSC_HAVE_CXX_COMPILER_TRUE ENSC_HAVE_CXX_COMPILER_FALSE ENSC_HAVE_C99_COMPILER_TRUE ENSC_HAVE_C99_COMPILER_FALSE ENSC_PATHPROG_SED CAT CHOWN CMP CP DIRNAME EGREP ENV GREP LN MKDIR MKFIFO MKTEMP MOUNT MV NICE PS RM RMDIR SED SH TAC TAR TOUCH TTY UMOUNT WC IP IPTABLES MODPROBE NAMEIF NOHUP RMMOD VCONFIG WGET DOXYGEN XSLTP XSLTPROC HAVE_XSLTP_TRUE HAVE_XSLTP_FALSE HAVE_XSLTPROC_TRUE HAVE_XSLTPROC_FALSE LIB_DEBUG_CPPFLAGS ENSC_USE_EXPENSIVE_TESTS initrddir RELEASE_CPPFLAGS DIET DIETFLAGS USE_DIETLIBC_TRUE USE_DIETLIBC_FALSE USE_DIETLIBC_COMPAT_TRUE USE_DIETLIBC_COMPAT_FALSE ENSC_USE_DIETLIBC_TRUE ENSC_USE_DIETLIBC_FALSE ENSC_USE_GLIBC_TRUE ENSC_USE_GLIBC_FALSE ECHO AR ac_ct_AR RANLIB ac_ct_RANLIB CPP CXXCPP F77 FFLAGS ac_ct_F77 LIBTOOL vserverdir CVS2CL_TAG CVS2CL HAVE_CVS2CL_TRUE HAVE_CVS2CL_FALSE RCS2LOG HAVE_RCS2LOG_TRUE HAVE_RCS2LOG_FALSE ENSC_ENABLE_INTERNAL_HEADERS_TRUE ENSC_ENABLE_INTERNAL_HEADERS_FALSE ENSC_HAVE_BEECRYPT_TRUE ENSC_HAVE_BEECRYPT_FALSE ENSC_CAN_BEECRYPT_WITH_DIETLIBC_TRUE ENSC_CAN_BEECRYPT_WITH_DIETLIBC_FALSE LIBOBJS LTLIBOBJS' +ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot AMTAR am__tar am__untar MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT build build_cpu build_vendor build_os host host_cpu host_vendor host_os GPG_KEY CXX CXXFLAGS LDFLAGS CPPFLAGS ac_ct_CXX EXEEXT OBJEXT DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CXXDEPMODE am__fastdepCXX_TRUE am__fastdepCXX_FALSE CC CFLAGS ac_ct_CC CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE LN_S ENSC_HAVE_CXX_COMPILER_TRUE ENSC_HAVE_CXX_COMPILER_FALSE ENSC_HAVE_C99_COMPILER_TRUE ENSC_HAVE_C99_COMPILER_FALSE ENSC_PATHPROG_SED CAT CHOWN CMP CP DIRNAME EGREP ENV GREP LN MKDIR MKFIFO MKTEMP MOUNT MV NICE PS RM RMDIR SED SH TAC TAR TOUCH TTY UMOUNT WC IP IPTABLES MODPROBE NAMEIF NOHUP RMMOD VCONFIG WGET IONICE DOXYGEN XSLTP XSLTPROC HAVE_XSLTP_TRUE HAVE_XSLTP_FALSE HAVE_XSLTPROC_TRUE HAVE_XSLTPROC_FALSE LIB_DEBUG_CPPFLAGS ENSC_USE_EXPENSIVE_TESTS initrddir RELEASE_CPPFLAGS DIET DIETFLAGS USE_DIETLIBC_TRUE USE_DIETLIBC_FALSE USE_DIETLIBC_COMPAT_TRUE USE_DIETLIBC_COMPAT_FALSE ENSC_USE_DIETLIBC_TRUE ENSC_USE_DIETLIBC_FALSE ENSC_USE_GLIBC_TRUE ENSC_USE_GLIBC_FALSE ECHO AR ac_ct_AR RANLIB ac_ct_RANLIB CPP CXXCPP F77 FFLAGS ac_ct_F77 LIBTOOL vserverdir CVS2CL_TAG CVS2CL HAVE_CVS2CL_TRUE HAVE_CVS2CL_FALSE RCS2LOG HAVE_RCS2LOG_TRUE HAVE_RCS2LOG_FALSE ENSC_ENABLE_INTERNAL_HEADERS_TRUE ENSC_ENABLE_INTERNAL_HEADERS_FALSE ENSC_HAVE_BEECRYPT_TRUE ENSC_HAVE_BEECRYPT_FALSE ENSC_CAN_BEECRYPT_WITH_DIETLIBC_TRUE ENSC_CAN_BEECRYPT_WITH_DIETLIBC_FALSE LIBOBJS LTLIBOBJS' ac_subst_files='' # Initialize some variables set by options. @@ -6855,6 +6855,88 @@ Can not find the 'wget' tool within '${e ensc_dflt=":" fi + for ac_prog in ionice +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_path_IONICE+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + case $IONICE in + [\\/]* | ?:[\\/]*) + ac_cv_path_IONICE="$IONICE" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $ensc_searchpath +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_IONICE="$as_dir/$ac_word$ac_exec_ext" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + + ;; +esac +fi +IONICE=$ac_cv_path_IONICE + +if test -n "$IONICE"; then + echo "$as_me:$LINENO: result: $IONICE" >&5 +echo "${ECHO_T}$IONICE" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + test -n "$IONICE" && break +done +test -n "$IONICE" || IONICE="$ensc_dflt" + + + if test -z "${IONICE}" && $rq; then + if test -z ""; then + { { echo "$as_me:$LINENO: error: Can not find the 'ionice' tool within '${ensc_searchpath:-$PATH}'." $ +echo "$as_me: error: Can not find the 'ionice' tool within '${ensc_searchpath:-$PATH}'." >&2;} + { (exit 1); exit 1; }; } + else + { { echo "$as_me:$LINENO: error: +Can not find the 'ionice' tool within '${ensc_searchpath:-$PATH}'. +" >&5 +echo "$as_me: error: +Can not find the 'ionice' tool within '${ensc_searchpath:-$PATH}'. +" >&2;} + { (exit 1); exit 1; }; } + fi + fi + + test "${IONICE}" && ENSC_PATHPROG_SED="${ENSC_PATHPROG_SED}s!@'IONICE'@!${IONICE}!g;" + + test "${IONICE}" + + + + + + if test -z ":"; then + rq=true + else + rq=false + fi + + if $rq; then + ensc_dflt= + else + ensc_dflt=":" + fi + for ac_prog in doxygen do # Extract the first word of "$ac_prog", so it can be a program name with args. diff -Nurp util-vserver-0.30.210.orig/configure.ac util-vserver-0.30.210/configure.ac --- util-vserver-0.30.210.orig/configure.ac 2006-07-05 23:05:17.000000000 +0930 +++ util-vserver-0.30.210/configure.ac 2006-07-05 23:07:39.000000000 +0930 @@ -56,6 +56,7 @@ ENSC_PATHPROG(NOHUP, nohup) ENSC_PATHPROG(RMMOD, rmmod) ENSC_PATHPROG(VCONFIG, vconfig,, [See http://www.candelatech.com/~greear/vlan.html; usually this tool is shipped in the 'vconfig' or 'vlan' package of your distribution]) ENSC_PATHPROG(WGET, wget) +ENSC_PATHPROG(IONICE, ionice) ENSC_PATHPROG(DOXYGEN, doxygen, [:]) ENSC_PATHPROG(XSLTP, xsltp, [:]) diff -urN util-vserver-0.30.210.orig/kernel/context.h util-vserver-0.30.210/kernel/context.h --- util-vserver-0.30.210.orig/kernel/context.h 2006-07-05 23:05:17.000000000 +0930 +++ util-vserver-0.30.210/kernel/context.h 2006-07-13 13:30:53.000000000 +0930 @@ -43,6 +43,8 @@ #define VXF_IGNEG_NICE (1ULL<<52) +#define VXF_IGNEG_IONICE (1ULL<<53) + #define VXF_ONE_TIME (0x0003ULL<<32) #define VXF_INIT_SET (VXF_STATE_SETUP|VXF_STATE_INIT) diff -urN util-vserver-0.30.210.orig/lib/cflags-v13.c util-vserver-0.30.210/lib/cflags-v13.c --- util-vserver-0.30.210.orig/lib/cflags-v13.c 2006-07-05 23:05:17.000000000 +0930 +++ util-vserver-0.30.210/lib/cflags-v13.c 2006-07-13 13:12:52.000000000 +0930 @@ -57,6 +57,7 @@ DECL("fork_rss", VC_VXF_FORK_RSS), DECL("prolific", VC_VXF_PROLIFIC), DECL("igneg_nice", VC_VXF_IGNEG_NICE), + DECL("igneg_ionice", VC_VXF_IGNEG_IONICE), // Some pseudo flags DECL("secure", VC_VXF_HIDE_NETIF), diff -urN util-vserver-0.30.210.orig/lib/vserver.h util-vserver-0.30.210/lib/vserver.h --- util-vserver-0.30.210.orig/lib/vserver.h 2006-07-05 23:05:17.000000000 +0930 +++ util-vserver-0.30.210/lib/vserver.h 2006-07-13 13:32:10.000000000 +0930 @@ -185,6 +185,7 @@ #define VC_VXF_PROLIFIC (1ULL<<49) #define VC_VXF_IGNEG_NICE (1ULL<<52) +#define VC_VXF_IGNEG_IONICE (1ULL<<53) // the ccapabilities diff -Nurp util-vserver-0.30.210.orig/scripts/util-vserver-vars.pathsubst util-vserver-0.30.210/scripts/util-vserver-vars.pathsubst --- util-vserver-0.30.210.orig/scripts/util-vserver-vars.pathsubst 2006-07-05 23:05:17.000000000 +0930 +++ util-vserver-0.30.210/scripts/util-vserver-vars.pathsubst 2006-07-05 23:06:39.000000000 +0930 @@ -131,6 +131,7 @@ _UMOUNT="@UMOUNT@" _VCONFIG="@VCONFIG@" _WC="@WC@" _WGET="@WGET@" +_IONICE="@IONICE@" # https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=106057 WORKAROUND_106057=1 diff -Nurp util-vserver-0.30.210.orig/scripts/vserver.functions util-vserver-0.30.210/scripts/vserver.functions --- util-vserver-0.30.210.orig/scripts/vserver.functions 2006-07-05 23:05:17.000000000 +0930 +++ util-vserver-0.30.210/scripts/vserver.functions 2006-07-05 23:12:17.000000000 +0930 @@ -20,6 +20,7 @@ # $VSERVER_NAME ... name of vserver declare -a NICE_CMD=() +declare -a IONICE_CMD=() declare -a CHBIND_OPTS=() declare -a CAP_OPTS=() declare -a CHCONTEXT_INIT_OPTS=() @@ -106,6 +107,17 @@ function _generateNiceCommand NICE_CMD=( $_NICE -$nice ) } +function _generateIONiceCommand +{ + local vdir=$1 + local ionice_class=2 + local ionice_priority=0 + + test -r "$vdir/ionice/class" && read ionice_class <"$vdir"/ionice/class + test -r "$vdir/ionice/priority" && read ionice_priority <"$vdir"/ionice/priority + + IONICE_CMD=( $_IONICE -c$ionice_class -n$ionice_priority ) +} function _generatePersonalityOptions { @@ -679,6 +691,7 @@ function generateOptions _generateInterfaceOptions "$1" test -n "$_HAVE_CHBIND_OPTIONS" || _generateChbindOptions "$1" _generateNiceCommand "$1" + _generateIONiceCommand "$1" _generateInitOptions "$1" _generateChcontextOptions "$1" _generateScheduleOptions "$1" diff -Nurp util-vserver-0.30.210.orig/scripts/vserver.start util-vserver-0.30.210/scripts/vserver.start --- util-vserver-0.30.210.orig/scripts/vserver.start 2006-07-05 23:05:17.000000000 +0930 +++ util-vserver-0.30.210/scripts/vserver.start 2006-07-05 23:13:51.000000000 +0930 @@ -123,6 +123,7 @@ test -z "$OPTION_DEFAULTTTY" || setDefau pushd "$VSERVER_DIR"/vdir/ >/dev/null is_configured=1 if $_VSERVER_INFO - FEATURE migrate; then + ${IONICE_CMD[@]} \ ${NICE_CMD[@]} \ $_CHBIND "${CHBIND_OPTS[@]}" -- \ $_EXEC_ULIMIT "$VSERVER_DIR"/ulimits \ @@ -146,6 +147,7 @@ else $_MKFIFO -m600 "$startsync_pipe" ## safe, since mkfifo does not follow symlinks fi + ${IONICE_CMD[@]} \ ${NICE_CMD[@]} \ $_CHBIND "${CHBIND_OPTS[@]}" \ $_EXEC_ULIMIT "$VSERVER_DIR/ulimits" \ diff -Nurp util-vserver-0.30.210.orig/scripts/vserver.stop util-vserver-0.30.210/scripts/vserver.stop --- util-vserver-0.30.210.orig/scripts/vserver.stop 2006-07-05 23:05:17.000000000 +0930 +++ util-vserver-0.30.210/scripts/vserver.stop 2006-07-05 23:14:25.000000000 +0930 @@ -70,11 +70,13 @@ if test -n "$_IS_FAKEINIT" && \ ## HACK: remove the 'initpid' stuff above when PID virtualization ## is implemented elif $_VSERVER_INFO - FEATURE migrate; then + "${IONICE_CMD[@]}" \ "${NICE_CMD[@]}" \ ${USE_VNAMESPACE:+$_VNAMESPACE --enter "$S_CONTEXT" -- } \ $_VCONTEXT $SILENT_OPT --migrate --chroot --xid "$S_CONTEXT" -- \ "${INITCMD_STOP[@]}" || fail=1 else + "${IONICE_CMD[@]}" \ "${NICE_CMD[@]}" \ "$_CHBIND" "${CHBIND_OPTS[@]}" \ "$_EXEC_ULIMIT" "$VSERVER_DIR/ulimits" \ diff -Nurp util-vserver-0.30.210.orig/scripts/vserver.suexec util-vserver-0.30.210/scripts/vserver.suexec --- util-vserver-0.30.210.orig/scripts/vserver.suexec 2006-07-05 23:05:17.000000000 +0930 +++ util-vserver-0.30.210/scripts/vserver.suexec 2006-07-05 23:15:09.000000000 +0930 @@ -31,6 +31,7 @@ cd "$VSERVER_DIR"/vdir/ if $_VSERVER_INFO - FEATURE migrate; then if test -z "$is_stopped"; then exec \ + "${IONICE_CMD[@]}" \ $_CHBIND "${CHBIND_OPTS[@]}" \ $_EXEC_ULIMIT "$VSERVER_DIR/ulimits" \ ${USE_VNAMESPACE:+$_VNAMESPACE --enter "$S_CONTEXT" -- } \ @@ -39,6 +40,7 @@ if $_VSERVER_INFO - FEATURE migrate; the "$@" else exec \ + "${IONICE_CMD[@]}" \ $_CHBIND "${CHBIND_OPTS[@]}" \ $_EXEC_ULIMIT "$VSERVER_DIR/ulimits" \ $_VCONTEXT --create "${OPTS_VCONTEXT_CREATE[@]}" -- \ @@ -49,6 +51,7 @@ if $_VSERVER_INFO - FEATURE migrate; the fi else exec \ + "${IONICE_CMD[@]}" \ "${NICE_CMD[@]}" \ "$_CHBIND" "${CHBIND_OPTS[@]}" \ "$_EXEC_ULIMIT" "$VSERVER_DIR/ulimits" \