aboutsummaryrefslogtreecommitdiffstats
path: root/fs/dcache.c
diff options
context:
space:
mode:
authorTim Bird <tim.bird@am.sony.com>2012-05-23 09:33:35 -0400
committerDavid S. Miller <davem@davemloft.net>2012-05-24 00:28:21 -0400
commit31fe62b9586643953f0c0c37a6357dafc69034e2 (patch)
tree69f9990423969df4ecbaea9d1e8de748284bea5e /fs/dcache.c
parentd0a24a3516fb36023bef28d2355fa34e7f32029f (diff)
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 'fs/dcache.c')
-rw-r--r--fs/dcache.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/fs/dcache.c b/fs/dcache.c
index 8c1ab8fb5012..4435d8b32904 100644
--- a/fs/dcache.c
+++ b/fs/dcache.c
@@ -3093,6 +3093,7 @@ static void __init dcache_init_early(void)
3093 HASH_EARLY, 3093 HASH_EARLY,
3094 &d_hash_shift, 3094 &d_hash_shift,
3095 &d_hash_mask, 3095 &d_hash_mask,
3096 0,
3096 0); 3097 0);
3097 3098
3098 for (loop = 0; loop < (1U << d_hash_shift); loop++) 3099 for (loop = 0; loop < (1U << d_hash_shift); loop++)
@@ -3123,6 +3124,7 @@ static void __init dcache_init(void)
3123 0, 3124 0,
3124 &d_hash_shift, 3125 &d_hash_shift,
3125 &d_hash_mask, 3126 &d_hash_mask,
3127 0,
3126 0); 3128 0);
3127 3129
3128 for (loop = 0; loop < (1U << d_hash_shift); loop++) 3130 for (loop = 0; loop < (1U << d_hash_shift); loop++)