diff options
author | Eric W. Biederman <ebiederm@xmission.com> | 2012-07-09 10:51:45 +0000 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2012-07-09 14:49:15 -0700 |
commit | a64d49c3dd504b685f9742a2f3dcb11fb8e4345f (patch) | |
tree | 2cb1d88c6a958f52c51a3785ea266c1533d695f4 /drivers/net/bonding | |
parent | 684901a6df1fb91fc9a2bdb89ffbebb241428d78 (diff) | |
download | linux-3.10-a64d49c3dd504b685f9742a2f3dcb11fb8e4345f.tar.gz linux-3.10-a64d49c3dd504b685f9742a2f3dcb11fb8e4345f.tar.bz2 linux-3.10-a64d49c3dd504b685f9742a2f3dcb11fb8e4345f.zip |
bonding: Manage /proc/net/bonding/ entries from the netdev events
It was recently reported that moving a bonding device between network
namespaces causes warnings from /proc. It turns out after the move we
were trying to add and to remove the /proc/net/bonding entries from the
wrong network namespace.
Move the bonding /proc registration code into the NETDEV_REGISTER and
NETDEV_UNREGISTER events where the proc registration and unregistration
will always happen at the right time.
Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/bonding')
-rw-r--r-- | drivers/net/bonding/bond_main.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c index b9c2ae62166..2ee76993f05 100644 --- a/drivers/net/bonding/bond_main.c +++ b/drivers/net/bonding/bond_main.c @@ -3227,6 +3227,12 @@ static int bond_master_netdev_event(unsigned long event, switch (event) { case NETDEV_CHANGENAME: return bond_event_changename(event_bond); + case NETDEV_UNREGISTER: + bond_remove_proc_entry(event_bond); + break; + case NETDEV_REGISTER: + bond_create_proc_entry(event_bond); + break; default: break; } @@ -4411,8 +4417,6 @@ static void bond_uninit(struct net_device *bond_dev) bond_work_cancel_all(bond); - bond_remove_proc_entry(bond); - bond_debug_unregister(bond); __hw_addr_flush(&bond->mc_list); @@ -4814,7 +4818,6 @@ static int bond_init(struct net_device *bond_dev) bond_set_lockdep_class(bond_dev); - bond_create_proc_entry(bond); list_add_tail(&bond->bond_list, &bn->dev_list); bond_prepare_sysfs_group(bond); |