[Bug 1173402] Kernel delays boot by 12s if ip= option given
https://bugzilla.suse.com/show_bug.cgi?id=1173402 https://bugzilla.suse.com/show_bug.cgi?id=1173402#c18 --- Comment #18 from Fabian Vogt <fvogt@suse.com> --- (In reply to Thomas Blume from comment #16)
(In reply to Fabian Vogt from comment #15)
Hm, did you check the latest code? There is:
if [ $? -eq 0 ] && [ -n "$(ls /tmp/leaseinfo.${netif}*)" ]; then
the leasinfo file won't be there if there was no dhcp setup.
Yes, but the use of $? there is still wrong AFAICT.
Ah, you mean when there is no ip= option at all and no bootdev either?
No, that "$?" is wrong because there is an if preceding it. Example: if false; then false; fi echo $? # 0 So using $? after an if is not working as expected here, it will only indicate the exit code of "do_dhcp -4" or "do_dhcp", but never of "do_dhcp -6".
But how should the network get set up via ifup then? Using rd.neednet without specifying an interface would make the script bail out early:
--> # Huh? No $1? [ -z "$1" ] && exit 1 --<
There is the ifname boot parameter, but that is again covered in another script, e.g. parse-ifname.sh.
ifup.sh is called by udev for each interface, so $1 is always set. Just "rd.neednet=1" works fine.
Not tested, but would that just move the "dhcp twice" case to netroot only? There's nothing which prevents the "# no ip option directed at our interface?" block from running after "# No ip lines default to dhcp" as the former doesn't touch /tmp/net.${netif}.up, does it?
Maybe, I'm overlooking something but AFAICS, the second if would call do_dhcp only when bootdev is set or ip=dhcp(6);
Indeed, so that would probably work. It's totally not obvious though.
--> if [ -e /tmp/net.bootdev ]; then BOOTDEV=$(cat /tmp/net.bootdev) if [ "$netif" = "$BOOTDEV" ] || [ "$BOOTDEV" = "$(cat /sys/class/net/${netif}/address)" ]; then load_ipv6 do_dhcp fi else if getargs 'ip=dhcp6'; then load_ipv6 do_dhcp -6 fi if getargs 'ip=dhcp'; then do_dhcp -4 fi fi --<
So, it shouldn't run again after the "# No ip lines default to dhcp" part. But it would write did-setup, which is fine since it could have been setup in "# No ip lines default to dhcp".
Yay, spaghetti...
Please note I appreciate your comments and will try to addess them as best as possible, but without breaking anything working. Unfortunately code changes here are very delicate since it has a big impact on netboot.
Yep, this is the reverse-engineering part of cleanup ;-) I don't see any downside to merging the "# No ip lines default to dhcp" block with the "# no ip option directed at our interface?" one down below, it would make the various options and flows much more obvious. -- You are receiving this mail because: You are on the CC list for the bug.
participants (1)
-
bugzilla_noreply@suse.com