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(FILE, file, [file])
ENSC_PATHPROG(GZIP, gzip, [gzip])
ENSC_PATHPROG(BZIP2, bzip2, [bzip2])
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),
#define VC_VXF_PROLIFIC (1ULL<<49)
#define VC_VXF_IGNEG_NICE (1ULL<<52)
+#define VC_VXF_IGNEG_IONICE (1ULL<<53)
// the ccapabilities
_VCONFIG="@VCONFIG@"
_WC="@WC@"
_WGET="@WGET@"
+_IONICE="@IONICE@"
# https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=106057
WORKAROUND_106057=1
# $VSERVER_NAME ... name of vserver
declare -a NICE_CMD=()
+declare -a IONICE_CMD=()
declare -a CHBIND_CMD=()
declare -a CAP_OPTS=()
declare -a CHCONTEXT_INIT_OPTS=()
NICE_CMD=( $_NICE -n $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
{
_generateInterfaceOptions "$1"
test -n "$_HAVE_CHBIND_OPTIONS" || _generateChbindOptions "$1"
_generateNiceCommand "$1"
+ _generateIONiceCommand "$1"
_generateInitOptions "$1"
_generateChcontextOptions "$1"
_generateScheduleOptions "$1"
pushd "$VSERVER_DIR"/vdir/ >/dev/null
is_configured=1
if $_VSERVER_INFO - FEATURE migrate; then
+ ${IONICE_CMD[@]} \
${NICE_CMD[@]} \
"${CHBIND_CMD[@]}" \
$_EXEC_ULIMIT "$VSERVER_DIR"/ulimits \
$_MKFIFO -m600 "$startsync_pipe" ## safe, since mkfifo does not follow symlinks
fi
+ ${IONICE_CMD[@]} \
${NICE_CMD[@]} \
"${CHBIND_CMD[@]}" \
$_EXEC_ULIMIT "$VSERVER_DIR/ulimits" \
$_VKILL -s INT --xid "$S_CONTEXT" -- 1 || fail=1
fi
elif $_VSERVER_INFO - FEATURE migrate; then
+ "${IONICE_CMD[@]}" \
"${NICE_CMD[@]}" \
"${CHBIND_CMD[@]}" \
"$_VSPACE" --enter "$S_CONTEXT" "${OPTS_VSPACE[@]}" -- \
$_VCONTEXT $SILENT_OPT --migrate --chroot --xid "$S_CONTEXT" -- \
"${INITCMD_STOP[@]}" || fail=1
else
+ "${IONICE_CMD[@]}" \
"${NICE_CMD[@]}" \
- "$_CHBIND" "${CHBIND_OPTS[@]}" \
+ "${CHBIND_CMD[@]}" \
"$_EXEC_ULIMIT" "$VSERVER_DIR/ulimits" \
$_CHCONTEXT_COMPAT "${CHCONTEXT_OPTS[@]}" \
"$_CAPCHROOT" "${CAPCHROOT_OPTS[@]}" "." \
if $_VSERVER_INFO - FEATURE migrate; then
if test -z "$is_stopped"; then
exec \
+ "${IONICE_CMD[@]}" \
"${NICE_CMD[@]}" \
"${CHBIND_CMD[@]}" \
$_EXEC_ULIMIT "$VSERVER_DIR/ulimits" \
"$@"
else
exec \
+ "${IONICE_CMD[@]}" \
"${NICE_CMD[@]}" \
"${CHBIND_CMD[@]}" \
$_EXEC_ULIMIT "$VSERVER_DIR/ulimits" \
fi
else
exec \
+ "${IONICE_CMD[@]}" \
"${NICE_CMD[@]}" \
"${CHBIND_CMD[@]}" \
"$_EXEC_ULIMIT" "$VSERVER_DIR/ulimits" \