mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-11 20:48:49 +08:00
vlan: unlink the upper neighbour before unregistering
On netdev unregister we're removing also all of its sysfs-associated stuff, including the sysfs symlinks that are controlled by netdev neighbour code. Also, it's a subtle race condition - cause we can still access it after unregistering. Move the unlinking right before the unregistering to fix both. CC: Patrick McHardy <kaber@trash.net> CC: "David S. Miller" <davem@davemloft.net> Signed-off-by: Veaceslav Falico <vfalico@redhat.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
5df27e6cb2
commit
47701a36a3
@ -98,14 +98,14 @@ void unregister_vlan_dev(struct net_device *dev, struct list_head *head)
|
||||
vlan_gvrp_request_leave(dev);
|
||||
|
||||
vlan_group_set_device(grp, vlan->vlan_proto, vlan_id, NULL);
|
||||
|
||||
netdev_upper_dev_unlink(real_dev, dev);
|
||||
/* Because unregister_netdevice_queue() makes sure at least one rcu
|
||||
* grace period is respected before device freeing,
|
||||
* we dont need to call synchronize_net() here.
|
||||
*/
|
||||
unregister_netdevice_queue(dev, head);
|
||||
|
||||
netdev_upper_dev_unlink(real_dev, dev);
|
||||
|
||||
if (grp->nr_vlan_devs == 0) {
|
||||
vlan_mvrp_uninit_applicant(real_dev);
|
||||
vlan_gvrp_uninit_applicant(real_dev);
|
||||
|
Loading…
Reference in New Issue
Block a user