aboutsummaryrefslogtreecommitdiffstats
path: root/net/netlink
diff options
context:
space:
mode:
authorPavel Emelyanov <xemul@openvz.org>2007-10-08 23:38:39 -0400
committerDavid S. Miller <davem@sunset.davemloft.net>2007-10-10 19:54:58 -0400
commit4665079cbb2a3e17de82f2ab2940b9f97f37d65e (patch)
tree8e51e9b9e6155eaeccf28783620a07b20a067d8d /net/netlink
parentd62a38d1ab350f787e4941e42a3d3e97971e38f5 (diff)
[NETNS]: Move some code into __init section when CONFIG_NET_NS=n
With the net namespaces many code leaved the __init section, thus making the kernel occupy more memory than it did before. Since we have a config option that prohibits the namespace creation, the functions that initialize/finalize some netns stuff are simply not needed and can be freed after the boot. Currently, this is almost not noticeable, since few calls are no longer in __init, but when the namespaces will be merged it will be possible to free more code. I propose to use the __net_init, __net_exit and __net_initdata "attributes" for functions/variables that are not used if the CONFIG_NET_NS is not set to save more space in memory. The exiting functions cannot just reside in the __exit section, as noticed by David, since the init section will have references on it and the compilation will fail due to modpost checks. These references can exist, since the init namespace never dies and the exit callbacks are never called. So I introduce the __exit_refok attribute just like it is already done with the __init_refok. Signed-off-by: Pavel Emelyanov <xemul@openvz.org> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/netlink')
-rw-r--r--net/netlink/af_netlink.c6
1 files changed, 3 insertions, 3 deletions
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
1927static int netlink_net_init(struct net *net) 1927static 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
1936static void netlink_net_exit(struct net *net) 1936static 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
1943static struct pernet_operations netlink_net_ops = { 1943static 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};