From: dyoung@redhat.com Date: Wed, 12 Dec 2012 04:23:24 +0000 (+0800) Subject: Wait for link ready before use the interface X-Git-Tag: 025~24 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=90781679276669b7b29aed4806098528b84808e3;p=thirdparty%2Fdracut.git Wait for link ready before use the interface Some network driver will take long time to initialize. We have an example in a HP machine which take about one minute for this. The callback such as "ip link set up" will fail, afterwards setup for network will also fail. Fix this by add a new function wait_for_if_link, wait the link ready before use it. Signed-off-by: Dave Young --- diff --git a/modules.d/40network/net-lib.sh b/modules.d/40network/net-lib.sh index 142aa687b..d9a241b48 100644 --- a/modules.d/40network/net-lib.sh +++ b/modules.d/40network/net-lib.sh @@ -323,6 +323,19 @@ parse_ifname_opts() { } +# some network driver need long time to initialize, wait before it's ready. +wait_for_if_link() { + local cnt=0 + local li + while [ $cnt -lt 600 ]; do + li=$(ip -o link show dev $1 2>/dev/null) + [ -n "$li" ] && return 0 + sleep 0.1 + cnt=$(($cnt+1)) + done + return 1 +} + wait_for_if_up() { local cnt=0 local li @@ -347,6 +360,8 @@ wait_for_route_ok() { } linkup() { - ip link set $1 up 2>/dev/null && wait_for_if_up $1 2>/dev/null + wait_for_if_link $1 2>/dev/null\ + && ip link set $1 up 2>/dev/null\ + && wait_for_if_up $1 2>/dev/null }