The new networking hashtable sizing is all bollixed up. The logic is wrong and tcp is setting it to the logarithm of what was intended. Heaven knows. Fix it up so that the sizing is the same as it used to be in 2.6, with a boot-time override. Which was what was intended. --- net/ipv4/route.c | 4 +--- net/ipv4/tcp.c | 4 +--- 2 files changed, 2 insertions(+), 6 deletions(-) diff -puN net/ipv4/route.c~ip_rt_init-sizing-fix net/ipv4/route.c --- 25/net/ipv4/route.c~ip_rt_init-sizing-fix 2004-02-28 00:05:04.000000000 -0800 +++ 25-akpm/net/ipv4/route.c 2004-02-28 00:05:04.000000000 -0800 @@ -2753,9 +2753,7 @@ int __init ip_rt_init(void) panic("IP: failed to allocate ip_dst_cache\n"); goal = num_physpages >> (26 - PAGE_SHIFT); - if (!rhash_entries) - goal = min(10, goal); - else + if (rhash_entries) goal = (rhash_entries * sizeof(struct rt_hash_bucket)) >> PAGE_SHIFT; for (order = 0; (1UL << order) < goal; order++) /* NOTHING */; diff -puN net/ipv4/tcp.c~ip_rt_init-sizing-fix net/ipv4/tcp.c --- 25/net/ipv4/tcp.c~ip_rt_init-sizing-fix 2004-02-28 00:05:04.000000000 -0800 +++ 25-akpm/net/ipv4/tcp.c 2004-02-28 00:05:04.000000000 -0800 @@ -2621,9 +2621,7 @@ void __init tcp_init(void) else goal = num_physpages >> (23 - PAGE_SHIFT); - if (!thash_entries) - goal = min(10UL, goal); - else + if (thash_entries) goal = (thash_entries * sizeof(struct tcp_ehash_bucket)) >> PAGE_SHIFT; for (order = 0; (1UL << order) < goal; order++) ; _