netns: struct net content re-work (v3)
Subsystems (3)
PATCH 1/2 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.
--- include/net/net_namespace.h | 6 +++--- include/net/netns/unix.h | 13 +++++++++++++ net/unix/af_unix.c | 4 ++-- net/unix/sysctl_net_unix.c | 12 ++++++------ 4 files changed, 24 insertions(+), 11 deletions(-) create mode 100644 include/net/netns/unix.h
include/net/net_namespace.h +3 -3
@@ -8,6 +8,8 @@#include <linux/workqueue.h> #include <linux/list.h> +#include <net/netns/unix.h> +struct proc_dir_entry ;struct net_device ;struct sock ;
@@ -45,9 +47,7 @@ struct net {rwlock_t packet_sklist_lock;struct hlist_head packet_sklist; -/* unix sockets */ -int sysctl_unix_max_dgram_qlen; -struct ctl_table_header *unix_ctl; +struct netns_unix unx; };#ifdef CONFIG_NET
include/net/netns/unix.h new file +13 -0
@@ -0,0 +1,13 @@ +/* +* Unix network namespace +*/ +#ifndef __NETNS_UNIX_H__ +#define __NETNS_UNIX_H__ + +struct ctl_table_header ; +struct netns_unix { +int sysctl_max_dgram_qlen; +struct ctl_table_header *ctl; +}; + +#endif /* __NETNS_UNIX_H__ */
net/unix/af_unix.c +2 -2
@@ -592,7 +592,7 @@ static struct sock * unix_create1(struct net *net, struct socket *sock) &af_unix_sk_receive_queue_lock_key); sk->sk_write_space = unix_write_space; - sk->sk_max_ack_backlog = net->sysctl_unix_max_dgram_qlen; + sk->sk_max_ack_backlog = net->unx.sysctl_max_dgram_qlen; sk->sk_destruct = unix_sock_destructor; u =unix_sk (sk); u->dentry =NULL ;
@@ -2138,7 +2138,7 @@ static int unix_net_init(struct net *net) {int error = -ENOMEM ; - net->sysctl_unix_max_dgram_qlen =10 ; + net->unx.sysctl_max_dgram_qlen =10 ;if (unix_sysctl_register (net)) goto out;
net/unix/sysctl_net_unix.c +6 -6
@@ -18,7 +18,7 @@ static ctl_table unix_table[] = { { .ctl_name = NET_UNIX_MAX_DGRAM_QLEN, .procname = "max_dgram_qlen", - .data = &init_net.sysctl_unix_max_dgram_qlen, + .data = &init_net.unx.sysctl_max_dgram_qlen, .maxlen = sizeof(int), .mode =0644 , .proc_handler = &proc_dointvec
@@ -40,9 +40,9 @@ int unix_sysctl_register(struct net *net)if (table ==NULL ) goto err_alloc; - table[0 ].data = &net->sysctl_unix_max_dgram_qlen; - net->unix_ctl =register_net_sysctl_table (net, unix_path, table); -if (net->unix_ctl ==NULL ) + table[0 ].data = &net->unx.sysctl_max_dgram_qlen; + net->unx.ctl =register_net_sysctl_table (net, unix_path, table); +if (net->unx.ctl ==NULL ) goto err_reg;return 0 ;
@@ -57,8 +57,8 @@ void unix_sysctl_unregister(struct net *net) {struct ctl_table *table; - table = net->unix_ctl->ctl_table_arg; -unregister_sysctl_table (net->unix_ctl); + table = net->unx.ctl->ctl_table_arg; +unregister_sysctl_table (net->unx.ctl);kfree (table); }
Signature · 1 line
1.5.3.rc5
From: "Denis V. Lunev" <[email protected]>
Date: Tue, 11 Dec 2007 14:55:07 +0300
Quoted 11 lines
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 timeThe second approach looks better for us. Other sub-systems will follow.
Signed-off-by Denis V. Lunev <[email protected]>Acked-by Daniel Lezcano <[email protected]>
Applied.