*/
 static int __bond_release_one(struct net_device *bond_dev,
                              struct net_device *slave_dev,
-                             bool all)
+                             bool all, bool unregister)
 {
        struct bonding *bond = netdev_priv(bond_dev);
        struct slave *slave, *oldcurrent;
                dev_set_mac_address(slave_dev, (struct sockaddr *)&ss);
        }
 
-       dev_set_mtu(slave_dev, slave->original_mtu);
+       if (unregister)
+               __dev_set_mtu(slave_dev, slave->original_mtu);
+       else
+               dev_set_mtu(slave_dev, slave->original_mtu);
 
        slave_dev->priv_flags &= ~IFF_BONDING;
 
 /* A wrapper used because of ndo_del_link */
 int bond_release(struct net_device *bond_dev, struct net_device *slave_dev)
 {
-       return __bond_release_one(bond_dev, slave_dev, false);
+       return __bond_release_one(bond_dev, slave_dev, false, false);
 }
 
 /* First release a slave and then destroy the bond if no more slaves are left.
        struct bonding *bond = netdev_priv(bond_dev);
        int ret;
 
-       ret = bond_release(bond_dev, slave_dev);
+       ret = __bond_release_one(bond_dev, slave_dev, false, true);
        if (ret == 0 && !bond_has_slaves(bond)) {
                bond_dev->priv_flags |= IFF_DISABLE_NETPOLL;
                netdev_info(bond_dev, "Destroying bond %s\n",
                if (bond_dev->type != ARPHRD_ETHER)
                        bond_release_and_destroy(bond_dev, slave_dev);
                else
-                       bond_release(bond_dev, slave_dev);
+                       __bond_release_one(bond_dev, slave_dev, false, true);
                break;
        case NETDEV_UP:
        case NETDEV_CHANGE:
 
        /* Release the bonded slaves */
        bond_for_each_slave(bond, slave, iter)
-               __bond_release_one(bond_dev, slave->dev, true);
+               __bond_release_one(bond_dev, slave->dev, true, true);
        netdev_info(bond_dev, "Released all slaves\n");
 
        arr = rtnl_dereference(bond->slave_arr);
 
 int dev_change_name(struct net_device *, const char *);
 int dev_set_alias(struct net_device *, const char *, size_t);
 int dev_change_net_namespace(struct net_device *, struct net *, const char *);
+int __dev_set_mtu(struct net_device *, int);
 int dev_set_mtu(struct net_device *, int);
 void dev_set_group(struct net_device *, int);
 int dev_set_mac_address(struct net_device *, struct sockaddr *);