diff options
Diffstat (limited to 'include/net/net_namespace.h')
| -rw-r--r-- | include/net/net_namespace.h | 27 |
1 files changed, 17 insertions, 10 deletions
diff --git a/include/net/net_namespace.h b/include/net/net_namespace.h index 6fc13d905c5f..ded434b032a4 100644 --- a/include/net/net_namespace.h +++ b/include/net/net_namespace.h | |||
| @@ -109,11 +109,6 @@ extern struct list_head net_namespace_list; | |||
| 109 | #ifdef CONFIG_NET_NS | 109 | #ifdef CONFIG_NET_NS |
| 110 | extern void __put_net(struct net *net); | 110 | extern void __put_net(struct net *net); |
| 111 | 111 | ||
| 112 | static inline int net_alive(struct net *net) | ||
| 113 | { | ||
| 114 | return net && atomic_read(&net->count); | ||
| 115 | } | ||
| 116 | |||
| 117 | static inline struct net *get_net(struct net *net) | 112 | static inline struct net *get_net(struct net *net) |
| 118 | { | 113 | { |
| 119 | atomic_inc(&net->count); | 114 | atomic_inc(&net->count); |
| @@ -145,11 +140,6 @@ int net_eq(const struct net *net1, const struct net *net2) | |||
| 145 | } | 140 | } |
| 146 | #else | 141 | #else |
| 147 | 142 | ||
| 148 | static inline int net_alive(struct net *net) | ||
| 149 | { | ||
| 150 | return 1; | ||
| 151 | } | ||
| 152 | |||
| 153 | static inline struct net *get_net(struct net *net) | 143 | static inline struct net *get_net(struct net *net) |
| 154 | { | 144 | { |
| 155 | return net; | 145 | return net; |
| @@ -234,6 +224,23 @@ struct pernet_operations { | |||
| 234 | void (*exit)(struct net *net); | 224 | void (*exit)(struct net *net); |
| 235 | }; | 225 | }; |
| 236 | 226 | ||
| 227 | /* | ||
| 228 | * Use these carefully. If you implement a network device and it | ||
| 229 | * needs per network namespace operations use device pernet operations, | ||
| 230 | * otherwise use pernet subsys operations. | ||
| 231 | * | ||
| 232 | * This is critically important. Most of the network code cleanup | ||
| 233 | * runs with the assumption that dev_remove_pack has been called so no | ||
| 234 | * new packets will arrive during and after the cleanup functions have | ||
| 235 | * been called. dev_remove_pack is not per namespace so instead the | ||
| 236 | * guarantee of no more packets arriving in a network namespace is | ||
| 237 | * provided by ensuring that all network devices and all sockets have | ||
| 238 | * left the network namespace before the cleanup methods are called. | ||
| 239 | * | ||
| 240 | * For the longest time the ipv4 icmp code was registered as a pernet | ||
| 241 | * device which caused kernel oops, and panics during network | ||
| 242 | * namespace cleanup. So please don't get this wrong. | ||
| 243 | */ | ||
| 237 | extern int register_pernet_subsys(struct pernet_operations *); | 244 | extern int register_pernet_subsys(struct pernet_operations *); |
| 238 | extern void unregister_pernet_subsys(struct pernet_operations *); | 245 | extern void unregister_pernet_subsys(struct pernet_operations *); |
| 239 | extern int register_pernet_gen_subsys(int *id, struct pernet_operations *); | 246 | extern int register_pernet_gen_subsys(int *id, struct pernet_operations *); |
