]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - drivers/net/bonding/bond_main.c
bonding: do not cancel works in bond_uninit()
[karo-tx-linux.git] / drivers / net / bonding / bond_main.c
index a7d47350ea4b5657d4ee9683b92d7243ea2a9361..b7d45f367d4a6e604bdcd6c0a6aabb598587c3be 100644 (file)
@@ -615,15 +615,9 @@ static int bond_check_dev_link(struct bonding *bond,
                return netif_carrier_ok(slave_dev) ? BMSR_LSTATUS : 0;
 
        /* Try to get link status using Ethtool first. */
-       if (slave_dev->ethtool_ops) {
-               if (slave_dev->ethtool_ops->get_link) {
-                       u32 link;
-
-                       link = slave_dev->ethtool_ops->get_link(slave_dev);
-
-                       return link ? BMSR_LSTATUS : 0;
-               }
-       }
+       if (slave_dev->ethtool_ops->get_link)
+               return slave_dev->ethtool_ops->get_link(slave_dev) ?
+                       BMSR_LSTATUS : 0;
 
        /* Ethtool can't be used, fallback to MII ioctls. */
        ioctl = slave_ops->ndo_do_ioctl;
@@ -1510,8 +1504,9 @@ int bond_enslave(struct net_device *bond_dev, struct net_device *slave_dev)
        int link_reporting;
        int res = 0;
 
-       if (!bond->params.use_carrier && slave_dev->ethtool_ops == NULL &&
-               slave_ops->ndo_do_ioctl == NULL) {
+       if (!bond->params.use_carrier &&
+           slave_dev->ethtool_ops->get_link == NULL &&
+           slave_ops->ndo_do_ioctl == NULL) {
                pr_warning("%s: Warning: no link monitoring support for %s\n",
                           bond_dev->name, slave_dev->name);
        }
@@ -1838,7 +1833,7 @@ int bond_enslave(struct net_device *bond_dev, struct net_device *slave_dev)
                 * anyway (it holds no special properties of the bond device),
                 * so we can change it without calling change_active_interface()
                 */
-               if (!bond->curr_active_slave)
+               if (!bond->curr_active_slave && new_slave->link == BOND_LINK_UP)
                        bond->curr_active_slave = new_slave;
 
                break;
@@ -4436,8 +4431,6 @@ static void bond_uninit(struct net_device *bond_dev)
 
        list_del(&bond->bond_list);
 
-       bond_work_cancel_all(bond);
-
        bond_debug_unregister(bond);
 
        __hw_addr_flush(&bond->mc_list);