diff options
Diffstat (limited to 'drivers/net/bonding/bond_main.c')
| -rw-r--r-- | drivers/net/bonding/bond_main.c | 11 | 
1 files changed, 5 insertions, 6 deletions
| diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c index 7bd068a6056..6bbd90e1123 100644 --- a/drivers/net/bonding/bond_main.c +++ b/drivers/net/bonding/bond_main.c @@ -1746,6 +1746,8 @@ int bond_enslave(struct net_device *bond_dev, struct net_device *slave_dev)  	bond_compute_features(bond); +	bond_update_speed_duplex(new_slave); +  	read_lock(&bond->lock);  	new_slave->last_arp_rx = jiffies - @@ -1798,8 +1800,6 @@ int bond_enslave(struct net_device *bond_dev, struct net_device *slave_dev)  		new_slave->link == BOND_LINK_DOWN ? "DOWN" :  			(new_slave->link == BOND_LINK_UP ? "UP" : "BACK")); -	bond_update_speed_duplex(new_slave); -  	if (USES_PRIMARY(bond->params.mode) && bond->params.primary[0]) {  		/* if there is a primary slave, remember it */  		if (strcmp(bond->params.primary, new_slave->dev->name) == 0) { @@ -1964,7 +1964,6 @@ static int __bond_release_one(struct net_device *bond_dev,  	}  	block_netpoll_tx(); -	call_netdevice_notifiers(NETDEV_RELEASE, bond_dev);  	write_lock_bh(&bond->lock);  	slave = bond_get_slave_by_dev(bond, slave_dev); @@ -2066,8 +2065,10 @@ static int __bond_release_one(struct net_device *bond_dev,  	write_unlock_bh(&bond->lock);  	unblock_netpoll_tx(); -	if (bond->slave_cnt == 0) +	if (bond->slave_cnt == 0) {  		call_netdevice_notifiers(NETDEV_CHANGEADDR, bond->dev); +		call_netdevice_notifiers(NETDEV_RELEASE, bond->dev); +	}  	bond_compute_features(bond);  	if (!(bond_dev->features & NETIF_F_VLAN_CHALLENGED) && @@ -2373,8 +2374,6 @@ static void bond_miimon_commit(struct bonding *bond)  				bond_set_backup_slave(slave);  			} -			bond_update_speed_duplex(slave); -  			pr_info("%s: link status definitely up for interface %s, %u Mbps %s duplex.\n",  				bond->dev->name, slave->dev->name,  				slave->speed, slave->duplex ? "full" : "half"); |