summaryrefslogtreecommitdiffstats
path: root/drivers/net/bonding
diff options
context:
space:
mode:
authordingtianhong <dingtianhong@huawei.com>2014-01-18 09:28:52 +0100
committerDavid S. Miller <davem@davemloft.net>2014-01-23 02:45:32 +0100
commitc59ab673699b6dcf457caea46799679e2526917c (patch)
tree30aedf331487d4a2a9234ce7907a32c9b2a63ec5 /drivers/net/bonding
parentnet: vxlan: convert to act as a pernet subsystem (diff)
downloadlinux-c59ab673699b6dcf457caea46799679e2526917c.tar.xz
linux-c59ab673699b6dcf457caea46799679e2526917c.zip
bonding: clean the primary slave if there is no slave matching new primary
If the new primay is not matching any slave in the bond, the bond should record it to params, clean the primary slave and select a new active slave. Signed-off-by: Ding Tianhong <dingtianhong@huawei.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/bonding')
-rw-r--r--drivers/net/bonding/bond_options.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/drivers/net/bonding/bond_options.c b/drivers/net/bonding/bond_options.c
index 05a402c99bff..4cee04aa6eb3 100644
--- a/drivers/net/bonding/bond_options.c
+++ b/drivers/net/bonding/bond_options.c
@@ -1021,6 +1021,12 @@ int bond_option_primary_set(struct bonding *bond, struct bond_opt_value *newval)
}
}
+ if (bond->primary_slave) {
+ pr_info("%s: Setting primary slave to None.\n",
+ bond->dev->name);
+ bond->primary_slave = NULL;
+ bond_select_active_slave(bond);
+ }
strncpy(bond->params.primary, primary, IFNAMSIZ);
bond->params.primary[IFNAMSIZ - 1] = 0;