[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>
pull/228/head
Michael Brown 2021-02-01 23:32:34 +00:00
parent 6f1cb791ee
commit 0c94659a8a
1 changed files with 7 additions and 6 deletions

View File

@ -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 )