diff options
Diffstat (limited to 'net/core/net-sysfs.c')
| -rw-r--r-- | net/core/net-sysfs.c | 23 | 
1 files changed, 9 insertions, 14 deletions
diff --git a/net/core/net-sysfs.c b/net/core/net-sysfs.c index 11b98bc2aa8..33d2a1fba13 100644 --- a/net/core/net-sysfs.c +++ b/net/core/net-sysfs.c @@ -1179,9 +1179,14 @@ static void remove_queue_kobjects(struct net_device *net)  #endif  } -static const void *net_current_ns(void) +static void *net_grab_current_ns(void)  { -	return current->nsproxy->net_ns; +	struct net *ns = current->nsproxy->net_ns; +#ifdef CONFIG_NET_NS +	if (ns) +		atomic_inc(&ns->passive); +#endif +	return ns;  }  static const void *net_initial_ns(void) @@ -1196,22 +1201,13 @@ static const void *net_netlink_ns(struct sock *sk)  struct kobj_ns_type_operations net_ns_type_operations = {  	.type = KOBJ_NS_TYPE_NET, -	.current_ns = net_current_ns, +	.grab_current_ns = net_grab_current_ns,  	.netlink_ns = net_netlink_ns,  	.initial_ns = net_initial_ns, +	.drop_ns = net_drop_ns,  };  EXPORT_SYMBOL_GPL(net_ns_type_operations); -static void net_kobj_ns_exit(struct net *net) -{ -	kobj_ns_exit(KOBJ_NS_TYPE_NET, net); -} - -static struct pernet_operations kobj_net_ops = { -	.exit = net_kobj_ns_exit, -}; - -  #ifdef CONFIG_HOTPLUG  static int netdev_uevent(struct device *d, struct kobj_uevent_env *env)  { @@ -1339,6 +1335,5 @@ EXPORT_SYMBOL(netdev_class_remove_file);  int netdev_kobject_init(void)  {  	kobj_ns_type_register(&net_ns_type_operations); -	register_pernet_subsys(&kobj_net_ops);  	return class_register(&net_class);  }  |