diff options
author | Tim Bird <tim.bird@am.sony.com> | 2012-05-23 13:33:35 +0000 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2012-05-24 00:28:21 -0400 |
commit | 31fe62b9586643953f0c0c37a6357dafc69034e2 (patch) | |
tree | 69f9990423969df4ecbaea9d1e8de748284bea5e /net/ipv4/tcp.c | |
parent | d0a24a3516fb36023bef28d2355fa34e7f32029f (diff) | |
download | linux-3.10-31fe62b9586643953f0c0c37a6357dafc69034e2.tar.gz linux-3.10-31fe62b9586643953f0c0c37a6357dafc69034e2.tar.bz2 linux-3.10-31fe62b9586643953f0c0c37a6357dafc69034e2.zip |
mm: add a low limit to alloc_large_system_hash
UDP stack needs a minimum hash size value for proper operation and also
uses alloc_large_system_hash() for proper NUMA distribution of its hash
tables and automatic sizing depending on available system memory.
On some low memory situations, udp_table_init() must ignore the
alloc_large_system_hash() result and reallocs a bigger memory area.
As we cannot easily free old hash table, we leak it and kmemleak can
issue a warning.
This patch adds a low limit parameter to alloc_large_system_hash() to
solve this problem.
We then specify UDP_HTABLE_SIZE_MIN for UDP/UDPLite hash table
allocation.
Reported-by: Mark Asselstine <mark.asselstine@windriver.com>
Reported-by: Tim Bird <tim.bird@am.sony.com>
Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com>
Cc: Paul Gortmaker <paul.gortmaker@windriver.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ipv4/tcp.c')
-rw-r--r-- | net/ipv4/tcp.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c index bb485fcb077..3ba605f60e4 100644 --- a/net/ipv4/tcp.c +++ b/net/ipv4/tcp.c @@ -3514,6 +3514,7 @@ void __init tcp_init(void) 0, NULL, &tcp_hashinfo.ehash_mask, + 0, thash_entries ? 0 : 512 * 1024); for (i = 0; i <= tcp_hashinfo.ehash_mask; i++) { INIT_HLIST_NULLS_HEAD(&tcp_hashinfo.ehash[i].chain, i); @@ -3530,6 +3531,7 @@ void __init tcp_init(void) 0, &tcp_hashinfo.bhash_size, NULL, + 0, 64 * 1024); tcp_hashinfo.bhash_size = 1U << tcp_hashinfo.bhash_size; for (i = 0; i < tcp_hashinfo.bhash_size; i++) { |