diff options
author | Arnaldo Carvalho de Melo <acme@ghostprotocols.net> | 2005-08-09 23:09:30 -0400 |
---|---|---|
committer | David S. Miller <davem@sunset.davemloft.net> | 2005-08-29 18:42:13 -0400 |
commit | 8feaf0c0a5488b3d898a9c207eb6678f44ba3f26 (patch) | |
tree | ddd004afe2f7c8295f6fdb94d34f78a42b5961cb /net/ipv4/tcp.c | |
parent | 33b62231908c58ae04185e4f1063d1e35a7c8576 (diff) |
[INET]: Generalise tcp_tw_bucket, aka TIME_WAIT sockets
This paves the way to generalise the rest of the sock ID lookup
routines and saves some bytes in TCPv4 TIME_WAIT sockets on distro
kernels (where IPv6 is always built as a module):
[root@qemu ~]# grep tw_sock /proc/slabinfo
tw_sock_TCPv6 0 0 128 31 1
tw_sock_TCP 0 0 96 41 1
[root@qemu ~]#
Now if a protocol wants to use the TIME_WAIT generic infrastructure it
only has to set the sk_prot->twsk_obj_size field with the size of its
inet_timewait_sock derived sock and proto_register will create
sk_prot->twsk_slab, for now its only for INET sockets, but we can
introduce timewait_sock later if some non INET transport protocolo
wants to use this stuff.
Next changesets will take advantage of this new infrastructure to
generalise even more TCP code.
[acme@toy net-2.6.14]$ grep built-in /tmp/before.size /tmp/after.size
/tmp/before.size: 188646 11764 5068 205478 322a6 net/ipv4/built-in.o
/tmp/after.size: 188144 11764 5068 204976 320b0 net/ipv4/built-in.o
[acme@toy net-2.6.14]$
Tested with both IPv4 & IPv6 (::1 (localhost) & ::ffff:172.20.0.1
(qemu host)).
Signed-off-by: Arnaldo Carvalho de Melo <acme@ghostprotocols.net>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ipv4/tcp.c')
-rw-r--r-- | net/ipv4/tcp.c | 10 |
1 files changed, 0 insertions, 10 deletions
diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c index 2f4b1a374bb7..f1a708bf7a97 100644 --- a/net/ipv4/tcp.c +++ b/net/ipv4/tcp.c | |||
@@ -271,8 +271,6 @@ int sysctl_tcp_fin_timeout = TCP_FIN_TIMEOUT; | |||
271 | 271 | ||
272 | DEFINE_SNMP_STAT(struct tcp_mib, tcp_statistics); | 272 | DEFINE_SNMP_STAT(struct tcp_mib, tcp_statistics); |
273 | 273 | ||
274 | kmem_cache_t *tcp_timewait_cachep; | ||
275 | |||
276 | atomic_t tcp_orphan_count = ATOMIC_INIT(0); | 274 | atomic_t tcp_orphan_count = ATOMIC_INIT(0); |
277 | 275 | ||
278 | int sysctl_tcp_mem[3]; | 276 | int sysctl_tcp_mem[3]; |
@@ -2264,13 +2262,6 @@ void __init tcp_init(void) | |||
2264 | if (!tcp_hashinfo.bind_bucket_cachep) | 2262 | if (!tcp_hashinfo.bind_bucket_cachep) |
2265 | panic("tcp_init: Cannot alloc tcp_bind_bucket cache."); | 2263 | panic("tcp_init: Cannot alloc tcp_bind_bucket cache."); |
2266 | 2264 | ||
2267 | tcp_timewait_cachep = kmem_cache_create("tcp_tw_bucket", | ||
2268 | sizeof(struct tcp_tw_bucket), | ||
2269 | 0, SLAB_HWCACHE_ALIGN, | ||
2270 | NULL, NULL); | ||
2271 | if (!tcp_timewait_cachep) | ||
2272 | panic("tcp_init: Cannot alloc tcp_tw_bucket cache."); | ||
2273 | |||
2274 | /* Size and allocate the main established and bind bucket | 2265 | /* Size and allocate the main established and bind bucket |
2275 | * hash tables. | 2266 | * hash tables. |
2276 | * | 2267 | * |
@@ -2363,4 +2354,3 @@ EXPORT_SYMBOL(tcp_sendpage); | |||
2363 | EXPORT_SYMBOL(tcp_setsockopt); | 2354 | EXPORT_SYMBOL(tcp_setsockopt); |
2364 | EXPORT_SYMBOL(tcp_shutdown); | 2355 | EXPORT_SYMBOL(tcp_shutdown); |
2365 | EXPORT_SYMBOL(tcp_statistics); | 2356 | EXPORT_SYMBOL(tcp_statistics); |
2366 | EXPORT_SYMBOL(tcp_timewait_cachep); | ||