Commit 97a1e639 authored by nikolay@redhat.com's avatar nikolay@redhat.com Committed by David S. Miller

bonding: remove unnecessary dev_addr_from_first member

In struct bonding there's a member called dev_addr_from_first which is
used to denote when the bond dev should clone the first slave's MAC
address but since we have netdev's addr_assign_type variable that is not
necessary. We clone the first slave's MAC each time we have a random MAC
set to the bond device. This has the nice side-effect of also fixing an
inconsistency - when the MAC address of the bond dev is set after its
creation, but prior to having slaves, it's not kept and the first slave's
MAC is cloned. The only way to keep the MAC was to create the bond device
with the MAC address set (e.g. through ip link). In all cases if the
bond device is left without any slaves - its MAC gets reset to a random
one as before.
Signed-off-by: default avatarNikolay Aleksandrov <nikolay@redhat.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 8d2ada77
...@@ -1596,7 +1596,7 @@ int bond_enslave(struct net_device *bond_dev, struct net_device *slave_dev) ...@@ -1596,7 +1596,7 @@ int bond_enslave(struct net_device *bond_dev, struct net_device *slave_dev)
/* If this is the first slave, then we need to set the master's hardware /* If this is the first slave, then we need to set the master's hardware
* address to be the same as the slave's. */ * address to be the same as the slave's. */
if (bond->slave_cnt == 0 && bond->dev_addr_from_first) if (!bond->slave_cnt && bond->dev->addr_assign_type == NET_ADDR_RANDOM)
bond_set_dev_addr(bond->dev, slave_dev); bond_set_dev_addr(bond->dev, slave_dev);
new_slave = kzalloc(sizeof(struct slave), GFP_KERNEL); new_slave = kzalloc(sizeof(struct slave), GFP_KERNEL);
...@@ -2041,7 +2041,6 @@ static int __bond_release_one(struct net_device *bond_dev, ...@@ -2041,7 +2041,6 @@ static int __bond_release_one(struct net_device *bond_dev,
if (bond->slave_cnt == 0) { if (bond->slave_cnt == 0) {
bond_set_carrier(bond); bond_set_carrier(bond);
eth_hw_addr_random(bond_dev); eth_hw_addr_random(bond_dev);
bond->dev_addr_from_first = true;
if (bond_vlan_used(bond)) { if (bond_vlan_used(bond)) {
pr_warning("%s: Warning: clearing HW address of %s while it still has VLANs.\n", pr_warning("%s: Warning: clearing HW address of %s while it still has VLANs.\n",
...@@ -4800,10 +4799,8 @@ static int bond_init(struct net_device *bond_dev) ...@@ -4800,10 +4799,8 @@ static int bond_init(struct net_device *bond_dev)
/* Ensure valid dev_addr */ /* Ensure valid dev_addr */
if (is_zero_ether_addr(bond_dev->dev_addr) && if (is_zero_ether_addr(bond_dev->dev_addr) &&
bond_dev->addr_assign_type == NET_ADDR_PERM) { bond_dev->addr_assign_type == NET_ADDR_PERM)
eth_hw_addr_random(bond_dev); eth_hw_addr_random(bond_dev);
bond->dev_addr_from_first = true;
}
return 0; return 0;
} }
......
...@@ -248,7 +248,6 @@ struct bonding { ...@@ -248,7 +248,6 @@ struct bonding {
/* debugging support via debugfs */ /* debugging support via debugfs */
struct dentry *debug_dir; struct dentry *debug_dir;
#endif /* CONFIG_DEBUG_FS */ #endif /* CONFIG_DEBUG_FS */
bool dev_addr_from_first;
}; };
static inline bool bond_vlan_used(struct bonding *bond) static inline bool bond_vlan_used(struct bonding *bond)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment