diff options
-rw-r--r-- | drivers/net/loopback.c | 6 | ||||
-rw-r--r-- | fs/proc/proc_net.c | 8 | ||||
-rw-r--r-- | include/linux/init.h | 1 | ||||
-rw-r--r-- | include/net/net_namespace.h | 9 | ||||
-rw-r--r-- | net/core/dev.c | 16 | ||||
-rw-r--r-- | net/core/dev_mcast.c | 6 | ||||
-rw-r--r-- | net/netlink/af_netlink.c | 6 | ||||
-rw-r--r-- | scripts/mod/modpost.c | 1 |
8 files changed, 32 insertions, 21 deletions
diff --git a/drivers/net/loopback.c b/drivers/net/loopback.c index d6997aec45dd..be25aa33971c 100644 --- a/drivers/net/loopback.c +++ b/drivers/net/loopback.c | |||
@@ -250,7 +250,7 @@ static void loopback_setup(struct net_device *dev) | |||
250 | } | 250 | } |
251 | 251 | ||
252 | /* Setup and register the loopback device. */ | 252 | /* Setup and register the loopback device. */ |
253 | static int loopback_net_init(struct net *net) | 253 | static __net_init int loopback_net_init(struct net *net) |
254 | { | 254 | { |
255 | struct net_device *dev; | 255 | struct net_device *dev; |
256 | int err; | 256 | int err; |
@@ -278,14 +278,14 @@ out_free_netdev: | |||
278 | goto out; | 278 | goto out; |
279 | } | 279 | } |
280 | 280 | ||
281 | static void loopback_net_exit(struct net *net) | 281 | static __net_exit void loopback_net_exit(struct net *net) |
282 | { | 282 | { |
283 | struct net_device *dev = net->loopback_dev; | 283 | struct net_device *dev = net->loopback_dev; |
284 | 284 | ||
285 | unregister_netdev(dev); | 285 | unregister_netdev(dev); |
286 | } | 286 | } |
287 | 287 | ||
288 | static struct pernet_operations loopback_net_ops = { | 288 | static struct pernet_operations __net_initdata loopback_net_ops = { |
289 | .init = loopback_net_init, | 289 | .init = loopback_net_init, |
290 | .exit = loopback_net_exit, | 290 | .exit = loopback_net_exit, |
291 | }; | 291 | }; |
diff --git a/fs/proc/proc_net.c b/fs/proc/proc_net.c index 85cc8e8bb862..2e91fb756e9a 100644 --- a/fs/proc/proc_net.c +++ b/fs/proc/proc_net.c | |||
@@ -140,7 +140,7 @@ static struct inode_operations proc_net_dir_inode_operations = { | |||
140 | .setattr = proc_net_setattr, | 140 | .setattr = proc_net_setattr, |
141 | }; | 141 | }; |
142 | 142 | ||
143 | static int proc_net_ns_init(struct net *net) | 143 | static __net_init int proc_net_ns_init(struct net *net) |
144 | { | 144 | { |
145 | struct proc_dir_entry *root, *netd, *net_statd; | 145 | struct proc_dir_entry *root, *netd, *net_statd; |
146 | int err; | 146 | int err; |
@@ -178,19 +178,19 @@ free_root: | |||
178 | goto out; | 178 | goto out; |
179 | } | 179 | } |
180 | 180 | ||
181 | static void proc_net_ns_exit(struct net *net) | 181 | static __net_exit void proc_net_ns_exit(struct net *net) |
182 | { | 182 | { |
183 | remove_proc_entry("stat", net->proc_net); | 183 | remove_proc_entry("stat", net->proc_net); |
184 | remove_proc_entry("net", net->proc_net_root); | 184 | remove_proc_entry("net", net->proc_net_root); |
185 | kfree(net->proc_net_root); | 185 | kfree(net->proc_net_root); |
186 | } | 186 | } |
187 | 187 | ||
188 | struct pernet_operations proc_net_ns_ops = { | 188 | struct pernet_operations __net_initdata proc_net_ns_ops = { |
189 | .init = proc_net_ns_init, | 189 | .init = proc_net_ns_init, |
190 | .exit = proc_net_ns_exit, | 190 | .exit = proc_net_ns_exit, |
191 | }; | 191 | }; |
192 | 192 | ||
193 | int proc_net_init(void) | 193 | int __init proc_net_init(void) |
194 | { | 194 | { |
195 | proc_net_shadow = proc_mkdir("net", NULL); | 195 | proc_net_shadow = proc_mkdir("net", NULL); |
196 | proc_net_shadow->proc_iops = &proc_net_dir_inode_operations; | 196 | proc_net_shadow->proc_iops = &proc_net_dir_inode_operations; |
diff --git a/include/linux/init.h b/include/linux/init.h index 74b1f43bf982..f8d9d0b5cffc 100644 --- a/include/linux/init.h +++ b/include/linux/init.h | |||
@@ -57,6 +57,7 @@ | |||
57 | * The markers follow same syntax rules as __init / __initdata. */ | 57 | * The markers follow same syntax rules as __init / __initdata. */ |
58 | #define __init_refok noinline __attribute__ ((__section__ (".text.init.refok"))) | 58 | #define __init_refok noinline __attribute__ ((__section__ (".text.init.refok"))) |
59 | #define __initdata_refok __attribute__ ((__section__ (".data.init.refok"))) | 59 | #define __initdata_refok __attribute__ ((__section__ (".data.init.refok"))) |
60 | #define __exit_refok noinline __attribute__ ((__section__ (".exit.text.refok"))) | ||
60 | 61 | ||
61 | #ifdef MODULE | 62 | #ifdef MODULE |
62 | #define __exit __attribute__ ((__section__(".exit.text"))) __cold | 63 | #define __exit __attribute__ ((__section__(".exit.text"))) __cold |
diff --git a/include/net/net_namespace.h b/include/net/net_namespace.h index 934c840b5941..93aa87d32804 100644 --- a/include/net/net_namespace.h +++ b/include/net/net_namespace.h | |||
@@ -99,6 +99,15 @@ static inline void release_net(struct net *net) | |||
99 | #define for_each_net(VAR) \ | 99 | #define for_each_net(VAR) \ |
100 | list_for_each_entry(VAR, &net_namespace_list, list) | 100 | list_for_each_entry(VAR, &net_namespace_list, list) |
101 | 101 | ||
102 | #ifdef CONFIG_NET_NS | ||
103 | #define __net_init | ||
104 | #define __net_exit | ||
105 | #define __net_initdata | ||
106 | #else | ||
107 | #define __net_init __init | ||
108 | #define __net_exit __exit_refok | ||
109 | #define __net_initdata __initdata | ||
110 | #endif | ||
102 | 111 | ||
103 | struct pernet_operations { | 112 | struct pernet_operations { |
104 | struct list_head list; | 113 | struct list_head list; |
diff --git a/net/core/dev.c b/net/core/dev.c index 1aa07047826e..e7e728aea9f3 100644 --- a/net/core/dev.c +++ b/net/core/dev.c | |||
@@ -2611,7 +2611,7 @@ static const struct file_operations ptype_seq_fops = { | |||
2611 | }; | 2611 | }; |
2612 | 2612 | ||
2613 | 2613 | ||
2614 | static int dev_proc_net_init(struct net *net) | 2614 | static int __net_init dev_proc_net_init(struct net *net) |
2615 | { | 2615 | { |
2616 | int rc = -ENOMEM; | 2616 | int rc = -ENOMEM; |
2617 | 2617 | ||
@@ -2636,7 +2636,7 @@ out_dev: | |||
2636 | goto out; | 2636 | goto out; |
2637 | } | 2637 | } |
2638 | 2638 | ||
2639 | static void dev_proc_net_exit(struct net *net) | 2639 | static void __net_exit dev_proc_net_exit(struct net *net) |
2640 | { | 2640 | { |
2641 | wext_proc_exit(net); | 2641 | wext_proc_exit(net); |
2642 | 2642 | ||
@@ -2645,7 +2645,7 @@ static void dev_proc_net_exit(struct net *net) | |||
2645 | proc_net_remove(net, "dev"); | 2645 | proc_net_remove(net, "dev"); |
2646 | } | 2646 | } |
2647 | 2647 | ||
2648 | static struct pernet_operations dev_proc_ops = { | 2648 | static struct pernet_operations __net_initdata dev_proc_ops = { |
2649 | .init = dev_proc_net_init, | 2649 | .init = dev_proc_net_init, |
2650 | .exit = dev_proc_net_exit, | 2650 | .exit = dev_proc_net_exit, |
2651 | }; | 2651 | }; |
@@ -4278,7 +4278,7 @@ static struct hlist_head *netdev_create_hash(void) | |||
4278 | } | 4278 | } |
4279 | 4279 | ||
4280 | /* Initialize per network namespace state */ | 4280 | /* Initialize per network namespace state */ |
4281 | static int netdev_init(struct net *net) | 4281 | static int __net_init netdev_init(struct net *net) |
4282 | { | 4282 | { |
4283 | INIT_LIST_HEAD(&net->dev_base_head); | 4283 | INIT_LIST_HEAD(&net->dev_base_head); |
4284 | rwlock_init(&dev_base_lock); | 4284 | rwlock_init(&dev_base_lock); |
@@ -4299,18 +4299,18 @@ err_name: | |||
4299 | return -ENOMEM; | 4299 | return -ENOMEM; |
4300 | } | 4300 | } |
4301 | 4301 | ||
4302 | static void netdev_exit(struct net *net) | 4302 | static void __net_exit netdev_exit(struct net *net) |
4303 | { | 4303 | { |
4304 | kfree(net->dev_name_head); | 4304 | kfree(net->dev_name_head); |
4305 | kfree(net->dev_index_head); | 4305 | kfree(net->dev_index_head); |
4306 | } | 4306 | } |
4307 | 4307 | ||
4308 | static struct pernet_operations netdev_net_ops = { | 4308 | static struct pernet_operations __net_initdata netdev_net_ops = { |
4309 | .init = netdev_init, | 4309 | .init = netdev_init, |
4310 | .exit = netdev_exit, | 4310 | .exit = netdev_exit, |
4311 | }; | 4311 | }; |
4312 | 4312 | ||
4313 | static void default_device_exit(struct net *net) | 4313 | static void __net_exit default_device_exit(struct net *net) |
4314 | { | 4314 | { |
4315 | struct net_device *dev, *next; | 4315 | struct net_device *dev, *next; |
4316 | /* | 4316 | /* |
@@ -4336,7 +4336,7 @@ static void default_device_exit(struct net *net) | |||
4336 | rtnl_unlock(); | 4336 | rtnl_unlock(); |
4337 | } | 4337 | } |
4338 | 4338 | ||
4339 | static struct pernet_operations default_device_ops = { | 4339 | static struct pernet_operations __net_initdata default_device_ops = { |
4340 | .exit = default_device_exit, | 4340 | .exit = default_device_exit, |
4341 | }; | 4341 | }; |
4342 | 4342 | ||
diff --git a/net/core/dev_mcast.c b/net/core/dev_mcast.c index 896b0ca5aed7..15241cf48af8 100644 --- a/net/core/dev_mcast.c +++ b/net/core/dev_mcast.c | |||
@@ -273,19 +273,19 @@ static const struct file_operations dev_mc_seq_fops = { | |||
273 | 273 | ||
274 | #endif | 274 | #endif |
275 | 275 | ||
276 | static int dev_mc_net_init(struct net *net) | 276 | static int __net_init dev_mc_net_init(struct net *net) |
277 | { | 277 | { |
278 | if (!proc_net_fops_create(net, "dev_mcast", 0, &dev_mc_seq_fops)) | 278 | if (!proc_net_fops_create(net, "dev_mcast", 0, &dev_mc_seq_fops)) |
279 | return -ENOMEM; | 279 | return -ENOMEM; |
280 | return 0; | 280 | return 0; |
281 | } | 281 | } |
282 | 282 | ||
283 | static void dev_mc_net_exit(struct net *net) | 283 | static void __net_exit dev_mc_net_exit(struct net *net) |
284 | { | 284 | { |
285 | proc_net_remove(net, "dev_mcast"); | 285 | proc_net_remove(net, "dev_mcast"); |
286 | } | 286 | } |
287 | 287 | ||
288 | static struct pernet_operations dev_mc_net_ops = { | 288 | static struct pernet_operations __net_initdata dev_mc_net_ops = { |
289 | .init = dev_mc_net_init, | 289 | .init = dev_mc_net_init, |
290 | .exit = dev_mc_net_exit, | 290 | .exit = dev_mc_net_exit, |
291 | }; | 291 | }; |
diff --git a/net/netlink/af_netlink.c b/net/netlink/af_netlink.c index 46eb5ea1fbd7..3ef32825da71 100644 --- a/net/netlink/af_netlink.c +++ b/net/netlink/af_netlink.c | |||
@@ -1924,7 +1924,7 @@ static struct net_proto_family netlink_family_ops = { | |||
1924 | .owner = THIS_MODULE, /* for consistency 8) */ | 1924 | .owner = THIS_MODULE, /* for consistency 8) */ |
1925 | }; | 1925 | }; |
1926 | 1926 | ||
1927 | static int netlink_net_init(struct net *net) | 1927 | static int __net_init netlink_net_init(struct net *net) |
1928 | { | 1928 | { |
1929 | #ifdef CONFIG_PROC_FS | 1929 | #ifdef CONFIG_PROC_FS |
1930 | if (!proc_net_fops_create(net, "netlink", 0, &netlink_seq_fops)) | 1930 | if (!proc_net_fops_create(net, "netlink", 0, &netlink_seq_fops)) |
@@ -1933,14 +1933,14 @@ static int netlink_net_init(struct net *net) | |||
1933 | return 0; | 1933 | return 0; |
1934 | } | 1934 | } |
1935 | 1935 | ||
1936 | static void netlink_net_exit(struct net *net) | 1936 | static void __net_exit netlink_net_exit(struct net *net) |
1937 | { | 1937 | { |
1938 | #ifdef CONFIG_PROC_FS | 1938 | #ifdef CONFIG_PROC_FS |
1939 | proc_net_remove(net, "netlink"); | 1939 | proc_net_remove(net, "netlink"); |
1940 | #endif | 1940 | #endif |
1941 | } | 1941 | } |
1942 | 1942 | ||
1943 | static struct pernet_operations netlink_net_ops = { | 1943 | static struct pernet_operations __net_initdata netlink_net_ops = { |
1944 | .init = netlink_net_init, | 1944 | .init = netlink_net_init, |
1945 | .exit = netlink_net_exit, | 1945 | .exit = netlink_net_exit, |
1946 | }; | 1946 | }; |
diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c index 6c145d6e89de..0a4051fbd34e 100644 --- a/scripts/mod/modpost.c +++ b/scripts/mod/modpost.c | |||
@@ -709,6 +709,7 @@ static int secref_whitelist(const char *modname, const char *tosec, | |||
709 | 709 | ||
710 | /* Check for pattern 0 */ | 710 | /* Check for pattern 0 */ |
711 | if ((strncmp(fromsec, ".text.init.refok", strlen(".text.init.refok")) == 0) || | 711 | if ((strncmp(fromsec, ".text.init.refok", strlen(".text.init.refok")) == 0) || |
712 | (strncmp(fromsec, ".exit.text.refok", strlen(".exit.text.refok")) == 0) || | ||
712 | (strncmp(fromsec, ".data.init.refok", strlen(".data.init.refok")) == 0)) | 713 | (strncmp(fromsec, ".data.init.refok", strlen(".data.init.refok")) == 0)) |
713 | return 1; | 714 | return 1; |
714 | 715 | ||