|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH for 4.9] vif-common.sh: Have iptables wait for the xtables lock
Forgot to cc' the release manager.
On Mon, Jun 5, 2017 at 11:02 AM, George Dunlap <george.dunlap@xxxxxxxxxx> wrote:
> iptables has a system-wide lock on the xtables. Strangely though, in
> the case of two concurrent invocations, the default is for the
> instance not grabbing the lock to exit out rather than waiting for it.
> This means that when starting a large number of guests in parallel,
> many will fail out with messages like this:
>
> 2017-05-10 11:45:40 UTC libxl: error: libxl_exec.c:118:
> libxl_report_child_exitstatus: /etc/xen/scripts/vif-bridge remove [18767]
> exited with error status 4
> 2017-05-10 11:50:52 UTC libxl: error: libxl_exec.c:118:
> libxl_report_child_exitstatus: /etc/xen/scripts/vif-bridge offline [1554]
> exited with error status 4
>
> In order to instruct iptables to wait for the lock, you have to
> specify '-w'. Unfortunately, not all versions of iptables have the
> '-w' option, so on first invocation check to see if it accepts the -w
> command.
>
> Reported-by: Antony Saba <awsaba@xxxxxxxxx>
> Signed-off-by: George Dunlap <george.dunlap@xxxxxxxxxx>
> ---
> CC: Ian Jackson <ian.jackson@xxxxxxxxxxxxx>
> CC: Wei Liu <wei.liu2@xxxxxxxxxx>
> ---
> tools/hotplug/Linux/vif-common.sh | 38 +++++++++++++++++++++++++++++++++++---
> 1 file changed, 35 insertions(+), 3 deletions(-)
>
> diff --git a/tools/hotplug/Linux/vif-common.sh
> b/tools/hotplug/Linux/vif-common.sh
> index 6e8d584..29cd8dd 100644
> --- a/tools/hotplug/Linux/vif-common.sh
> +++ b/tools/hotplug/Linux/vif-common.sh
> @@ -120,6 +120,38 @@ fi
> ip=${ip:-}
> ip=$(xenstore_read_default "$XENBUS_PATH/ip" "$ip")
>
> +IPTABLES_WAIT_RUNE="-w"
> +IPTABLES_WAIT_RUNE_CHECKED=false
> +
> +# When iptables introduced locking, in the event of lock contention,
> +# they made "fail" rather than "wait for the lock" the default
> +# behavior. In order to select "wait for the lock" behavior, you have
> +# to add the '-w' parameter. Unfortinately, both the locking and the
> +# option were only introduced in 2013, and older versions of iptables
> +# will fail if the '-w' parameter is included (since they don't
> +# recognize it). So check to see if it's supported the first time we
> +# use it.
> +iptables_w()
> +{
> + if ! $IPTABLES_WAIT_RUNE_CHECKED ; then
> + iptables $IPTABLES_WAIT_RUNE -L -n >& /dev/null
> + if [[ $? == 0 ]] ; then
> + # If we succeed, then -w is supported; don't check again
> + IPTABLES_WAIT_RUNE_CHECKED=true
> + elif [[ $? == 2 ]] ; then
> + iptables -L -n >& /dev/null
> + if [[ $? != 2 ]] ; then
> + # If we fail with PARAMETER_PROBLEM (2) with -w and
> + # don't fail with PARAMETER_PROBLEM without it, then
> + # it's the -w option
> + IPTABLES_WAIT_RUNE_CHECKED=true
> + IPTABLES_WAIT_RUNE=""
> + fi
> + fi
> + fi
> + iptables $IPTABLES_WAIT_RUNE "$@"
> +}
> +
> frob_iptable()
> {
> if [ "$command" == "online" -o "$command" == "add" ]
> @@ -129,9 +161,9 @@ frob_iptable()
> local c="-D"
> fi
>
> - iptables "$c" FORWARD -m physdev --physdev-is-bridged --physdev-in "$dev" \
> + iptables_w "$c" FORWARD -m physdev --physdev-is-bridged --physdev-in
> "$dev" \
> "$@" -j ACCEPT 2>/dev/null &&
> - iptables "$c" FORWARD -m physdev --physdev-is-bridged --physdev-out "$dev"
> \
> + iptables_w "$c" FORWARD -m physdev --physdev-is-bridged --physdev-out
> "$dev" \
> -j ACCEPT 2>/dev/null
>
> if [ \( "$command" == "online" -o "$command" == "add" \) -a $? -ne 0 ]
> @@ -154,7 +186,7 @@ handle_iptable()
> # binary is not sufficient, because the user may not have the appropriate
> # modules installed. If iptables is not working, then there's no need to
> do
> # anything with it, so we can just return.
> - if ! iptables -L -n >&/dev/null
> + if ! iptables_w -L -n >&/dev/null
> then
> return
> fi
> --
> 2.1.4
>
>
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@xxxxxxxxxxxxx
> https://lists.xen.org/xen-devel
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
https://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |