- 2.6.17 port work build breaks, but the patch set is relativly stable
[linux-flexiantxendom0-3.2.10.git] / drivers / net / bonding / bond_sysfs.c
index 2a251a7..f62e2f5 100644 (file)
@@ -423,11 +423,21 @@ static ssize_t bonding_store_mode(struct class_device *cd, const char *buf, size
                ret = -EINVAL;
                goto out;
        } else {
-               if (new_value == BOND_MODE_ACTIVEBACKUP) {
-                      INIT_WORK(&bond->arp_work, (void *)&bond_activebackup_arp_mon, bond->dev);
-                } else {
-                       INIT_WORK(&bond->arp_work, (void *)&bond_loadbalance_arp_mon, bond->dev);
-               }
+               if (new_value == BOND_MODE_ACTIVEBACKUP) {
+                       INIT_WORK(&bond->arp_work,
+                                 (void *)&bond_activebackup_arp_mon,
+                                 bond->dev);
+               } else {
+                       INIT_WORK(&bond->arp_work,
+                                 (void *)&bond_loadbalance_arp_mon,
+                                 bond->dev);
+               }
+               if (bond->params.mode == BOND_MODE_8023AD)
+                       bond_unset_master_3ad_flags(bond);
+
+               if (bond->params.mode == BOND_MODE_ALB)
+                       bond_unset_master_alb_flags(bond);
+
                bond->params.mode = new_value;
                bond_set_mode_ops(bond, bond->params.mode);
                printk(KERN_INFO DRV_NAME ": %s: setting mode to %s (%d).\n",