diff options
Diffstat (limited to 'net/ipv6/ip6_vti.c')
| -rw-r--r-- | net/ipv6/ip6_vti.c | 13 | 
1 files changed, 6 insertions, 7 deletions
diff --git a/net/ipv6/ip6_vti.c b/net/ipv6/ip6_vti.c index e550240c85e1..7f4f976aa24a 100644 --- a/net/ipv6/ip6_vti.c +++ b/net/ipv6/ip6_vti.c @@ -935,6 +935,7 @@ static inline int vti6_dev_init_gen(struct net_device *dev)  	if (!dev->tstats)  		return -ENOMEM;  	netdev_hold(dev, &t->dev_tracker, GFP_KERNEL); +	netdev_lockdep_set_classes(dev);  	return 0;  } @@ -1174,24 +1175,22 @@ err_alloc_dev:  	return err;  } -static void __net_exit vti6_exit_batch_net(struct list_head *net_list) +static void __net_exit vti6_exit_batch_rtnl(struct list_head *net_list, +					    struct list_head *dev_to_kill)  {  	struct vti6_net *ip6n;  	struct net *net; -	LIST_HEAD(list); -	rtnl_lock(); +	ASSERT_RTNL();  	list_for_each_entry(net, net_list, exit_list) {  		ip6n = net_generic(net, vti6_net_id); -		vti6_destroy_tunnels(ip6n, &list); +		vti6_destroy_tunnels(ip6n, dev_to_kill);  	} -	unregister_netdevice_many(&list); -	rtnl_unlock();  }  static struct pernet_operations vti6_net_ops = {  	.init = vti6_init_net, -	.exit_batch = vti6_exit_batch_net, +	.exit_batch_rtnl = vti6_exit_batch_rtnl,  	.id   = &vti6_net_id,  	.size = sizeof(struct vti6_net),  };  |