aboutsummaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
authorDavid Lamparter <equinox@diac24.net>2010-09-16 23:22:19 -0400
committerDavid S. Miller <davem@davemloft.net>2010-09-17 19:46:04 -0400
commit3b27e105550f7c4a79ecb6d6a9c49c651c59ae9b (patch)
tree5603f5c9322f40d40a63efe5519c0a9bf164b972 /net
parentb71c7aaa1e2a9858f0c469026098fbd6e046d7bb (diff)
netns: keep vlan slaves on master netns move
previously, if a vlan master device was moved from one network namespace to another, all 802.1q and macvlan slaves were deleted. we can use dev->reg_state to figure out whether dev_change_net_namespace is happening, since that won't set dev->reg_state NETREG_UNREGISTERING. so, this changes 8021q and macvlan to ignore NETDEV_UNREGISTER when reg_state is not NETREG_UNREGISTERING. Signed-off-by: David Lamparter <equinox@diac24.net> Reviewed-by: "Eric W. Biederman" <ebiederm@xmission.com> Acked-by: Daniel Lezcano <daniel.lezcano@free.fr> Acked-by: Patrick McHardy <kaber@trash.net> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net')
-rw-r--r--net/8021q/vlan.c4
-rw-r--r--net/core/dev.c4
2 files changed, 8 insertions, 0 deletions
diff --git a/net/8021q/vlan.c b/net/8021q/vlan.c
index a2ad1525057..2c6c2bd6e4a 100644
--- a/net/8021q/vlan.c
+++ b/net/8021q/vlan.c
@@ -525,6 +525,10 @@ static int vlan_device_event(struct notifier_block *unused, unsigned long event,
525 break; 525 break;
526 526
527 case NETDEV_UNREGISTER: 527 case NETDEV_UNREGISTER:
528 /* twiddle thumbs on netns device moves */
529 if (dev->reg_state != NETREG_UNREGISTERING)
530 break;
531
528 /* Delete all VLANs for this dev. */ 532 /* Delete all VLANs for this dev. */
529 grp->killall = 1; 533 grp->killall = 1;
530 534
diff --git a/net/core/dev.c b/net/core/dev.c
index c09ff096525..2c7934f8cf3 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -5686,6 +5686,10 @@ int dev_change_net_namespace(struct net_device *dev, struct net *net, const char
5686 5686
5687 /* Notify protocols, that we are about to destroy 5687 /* Notify protocols, that we are about to destroy
5688 this device. They should clean all the things. 5688 this device. They should clean all the things.
5689
5690 Note that dev->reg_state stays at NETREG_REGISTERED.
5691 This is wanted because this way 8021q and macvlan know
5692 the device is just moving and can keep their slaves up.
5689 */ 5693 */
5690 call_netdevice_notifiers(NETDEV_UNREGISTER, dev); 5694 call_netdevice_notifiers(NETDEV_UNREGISTER, dev);
5691 call_netdevice_notifiers(NETDEV_UNREGISTER_BATCH, dev); 5695 call_netdevice_notifiers(NETDEV_UNREGISTER_BATCH, dev);