aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDenis V. Lunev <den@openvz.org>2007-12-11 07:19:17 -0500
committerDavid S. Miller <davem@davemloft.net>2008-01-28 17:57:14 -0500
commita0a53c8ba95451feef6c1975016f0a1eb3044ad4 (patch)
tree0b64ce018878cbaa0bf5cdfa308d4a7e71218914
parent27147c9e6e8316af91dea487aa2c14b18dcff4cf (diff)
[NETNS]: struct net content re-work (v3)
Recently David Miller and Herbert Xu pointed out that struct net becomes overbloated and un-maintainable. There are two solutions: - provide a pointer to a network subsystem definition from struct net. This costs an additional dereferrence - place sub-system definition into the structure itself. This will speedup run-time access at the cost of recompilation time The second approach looks better for us. Other sub-systems will follow. Signed-off-by: Denis V. Lunev <den@openvz.org> Acked-by: Daniel Lezcano <dlezcano@fr.ibm.com> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--include/net/net_namespace.h6
-rw-r--r--include/net/netns/unix.h13
-rw-r--r--net/unix/af_unix.c4
-rw-r--r--net/unix/sysctl_net_unix.c12
4 files changed, 24 insertions, 11 deletions
diff --git a/include/net/net_namespace.h b/include/net/net_namespace.h
index b62e31fca474..d943fd4eaba5 100644
--- a/include/net/net_namespace.h
+++ b/include/net/net_namespace.h
@@ -8,6 +8,8 @@
8#include <linux/workqueue.h> 8#include <linux/workqueue.h>
9#include <linux/list.h> 9#include <linux/list.h>
10 10
11#include <net/netns/unix.h>
12
11struct proc_dir_entry; 13struct proc_dir_entry;
12struct net_device; 14struct net_device;
13struct sock; 15struct sock;
@@ -45,9 +47,7 @@ struct net {
45 rwlock_t packet_sklist_lock; 47 rwlock_t packet_sklist_lock;
46 struct hlist_head packet_sklist; 48 struct hlist_head packet_sklist;
47 49
48 /* unix sockets */ 50 struct netns_unix unx;
49 int sysctl_unix_max_dgram_qlen;
50 struct ctl_table_header *unix_ctl;
51}; 51};
52 52
53#ifdef CONFIG_NET 53#ifdef CONFIG_NET
diff --git a/include/net/netns/unix.h b/include/net/netns/unix.h
new file mode 100644
index 000000000000..284649d4dfb4
--- /dev/null
+++ b/include/net/netns/unix.h
@@ -0,0 +1,13 @@
1/*
2 * Unix network namespace
3 */
4#ifndef __NETNS_UNIX_H__
5#define __NETNS_UNIX_H__
6
7struct ctl_table_header;
8struct netns_unix {
9 int sysctl_max_dgram_qlen;
10 struct ctl_table_header *ctl;
11};
12
13#endif /* __NETNS_UNIX_H__ */
diff --git a/net/unix/af_unix.c b/net/unix/af_unix.c
index b8a2189fb5c0..63a9239571a4 100644
--- a/net/unix/af_unix.c
+++ b/net/unix/af_unix.c
@@ -592,7 +592,7 @@ static struct sock * unix_create1(struct net *net, struct socket *sock)
592 &af_unix_sk_receive_queue_lock_key); 592 &af_unix_sk_receive_queue_lock_key);
593 593
594 sk->sk_write_space = unix_write_space; 594 sk->sk_write_space = unix_write_space;
595 sk->sk_max_ack_backlog = net->sysctl_unix_max_dgram_qlen; 595 sk->sk_max_ack_backlog = net->unx.sysctl_max_dgram_qlen;
596 sk->sk_destruct = unix_sock_destructor; 596 sk->sk_destruct = unix_sock_destructor;
597 u = unix_sk(sk); 597 u = unix_sk(sk);
598 u->dentry = NULL; 598 u->dentry = NULL;
@@ -2138,7 +2138,7 @@ static int unix_net_init(struct net *net)
2138{ 2138{
2139 int error = -ENOMEM; 2139 int error = -ENOMEM;
2140 2140
2141 net->sysctl_unix_max_dgram_qlen = 10; 2141 net->unx.sysctl_max_dgram_qlen = 10;
2142 if (unix_sysctl_register(net)) 2142 if (unix_sysctl_register(net))
2143 goto out; 2143 goto out;
2144 2144
diff --git a/net/unix/sysctl_net_unix.c b/net/unix/sysctl_net_unix.c
index 553ef6a487d0..77513d7e35f2 100644
--- a/net/unix/sysctl_net_unix.c
+++ b/net/unix/sysctl_net_unix.c
@@ -18,7 +18,7 @@ static ctl_table unix_table[] = {
18 { 18 {
19 .ctl_name = NET_UNIX_MAX_DGRAM_QLEN, 19 .ctl_name = NET_UNIX_MAX_DGRAM_QLEN,
20 .procname = "max_dgram_qlen", 20 .procname = "max_dgram_qlen",
21 .data = &init_net.sysctl_unix_max_dgram_qlen, 21 .data = &init_net.unx.sysctl_max_dgram_qlen,
22 .maxlen = sizeof(int), 22 .maxlen = sizeof(int),
23 .mode = 0644, 23 .mode = 0644,
24 .proc_handler = &proc_dointvec 24 .proc_handler = &proc_dointvec
@@ -40,9 +40,9 @@ int unix_sysctl_register(struct net *net)
40 if (table == NULL) 40 if (table == NULL)
41 goto err_alloc; 41 goto err_alloc;
42 42
43 table[0].data = &net->sysctl_unix_max_dgram_qlen; 43 table[0].data = &net->unx.sysctl_max_dgram_qlen;
44 net->unix_ctl = register_net_sysctl_table(net, unix_path, table); 44 net->unx.ctl = register_net_sysctl_table(net, unix_path, table);
45 if (net->unix_ctl == NULL) 45 if (net->unx.ctl == NULL)
46 goto err_reg; 46 goto err_reg;
47 47
48 return 0; 48 return 0;
@@ -57,8 +57,8 @@ void unix_sysctl_unregister(struct net *net)
57{ 57{
58 struct ctl_table *table; 58 struct ctl_table *table;
59 59
60 table = net->unix_ctl->ctl_table_arg; 60 table = net->unx.ctl->ctl_table_arg;
61 unregister_sysctl_table(net->unix_ctl); 61 unregister_sysctl_table(net->unx.ctl);
62 kfree(table); 62 kfree(table);
63} 63}
64 64