diff options
author | Michael Brown <mcb30@ipxe.org> | 2021-02-01 23:32:34 +0000 |
---|---|---|
committer | Michael Brown <mcb30@ipxe.org> | 2021-02-01 23:33:50 +0000 |
commit | 0c94659a8ab29cfd4e20b35bf98e364de9901d77 (patch) | |
tree | f0aa4648d6fd9baf09b85d05e3b7fe9927f3c7eb | |
parent | 6f1cb791ee7939c7302c8f815d178e89295b0eda (diff) | |
download | ipxe-0c94659a8ab29cfd4e20b35bf98e364de9901d77.zip ipxe-0c94659a8ab29cfd4e20b35bf98e364de9901d77.tar.gz ipxe-0c94659a8ab29cfd4e20b35bf98e364de9901d77.tar.bz2 |
[autoboot] Avoid closing and immediately reopening network device
Some network devices can take a substantial time to close and reopen.
Avoid closing the device from which we are about to attempt booting,
in case it happens to be already open.
Suggested-by: Christian Iversen <ci@iversenit.dk>
Signed-off-by: Michael Brown <mcb30@ipxe.org>
-rw-r--r-- | src/usr/autoboot.c | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/src/usr/autoboot.c b/src/usr/autoboot.c index 51b07e1..62e90ec 100644 --- a/src/usr/autoboot.c +++ b/src/usr/autoboot.c @@ -210,18 +210,19 @@ int uriboot ( struct uri *filename, struct uri **root_paths, } /** - * Close all open net devices + * Close all but one network device * * Called before a fresh boot attempt in order to free up memory. We * don't just close the device immediately after the boot fails, * because there may still be TCP connections in the process of * closing. */ -static void close_all_netdevs ( void ) { - struct net_device *netdev; +static void close_other_netdevs ( struct net_device *netdev ) { + struct net_device *other; - for_each_netdev ( netdev ) { - ifclose ( netdev ); + for_each_netdev ( other ) { + if ( other != netdev ) + ifclose ( other ); } } @@ -388,7 +389,7 @@ int netboot ( struct net_device *netdev ) { int rc; /* Close all other network devices */ - close_all_netdevs(); + close_other_netdevs ( netdev ); /* Open device and display device status */ if ( ( rc = ifopen ( netdev ) ) != 0 ) |