mirror of
https://github.com/openvswitch/ovs
synced 2025-10-23 14:57:06 +00:00
bond: Be more careful about adding and removing netdevs in the monitor.
The code was careless about updating the netdev_monitor. Newly added slaves weren't added to the monitor until the next bond_reconfigure() call, and netdevs were never removed from the monitor.
This commit is contained in:
15
lib/bond.c
15
lib/bond.c
@@ -369,7 +369,16 @@ bond_slave_register(struct bond *bond, void *slave_, uint16_t stb_id,
|
||||
bond->bond_revalidate = true;
|
||||
}
|
||||
|
||||
slave->netdev = netdev;
|
||||
if (slave->netdev != netdev) {
|
||||
if (bond->monitor) {
|
||||
if (slave->netdev) {
|
||||
netdev_monitor_remove(bond->monitor, slave->netdev);
|
||||
}
|
||||
netdev_monitor_add(bond->monitor, netdev);
|
||||
}
|
||||
slave->netdev = netdev;
|
||||
}
|
||||
|
||||
free(slave->name);
|
||||
slave->name = xstrdup(netdev_get_name(netdev));
|
||||
}
|
||||
@@ -388,6 +397,10 @@ bond_slave_unregister(struct bond *bond, const void *slave_)
|
||||
return;
|
||||
}
|
||||
|
||||
if (bond->monitor) {
|
||||
netdev_monitor_remove(bond->monitor, slave->netdev);
|
||||
}
|
||||
|
||||
bond_enable_slave(slave, false, NULL);
|
||||
|
||||
del_active = bond->active_slave == slave;
|
||||
|
||||
Reference in New Issue
Block a user