aboutsummaryrefslogtreecommitdiffstats
path: root/fs/inode.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/inode.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/inode.c')
-rw-r--r--fs/inode.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/fs/inode.c b/fs/inode.c
index 9f4f5fecc096..e3ef2573cbdf 100644
--- a/fs/inode.c
+++ b/fs/inode.c
@@ -1647,6 +1647,7 @@ void __init inode_init_early(void)
1647 HASH_EARLY, 1647 HASH_EARLY,
1648 &i_hash_shift, 1648 &i_hash_shift,
1649 &i_hash_mask, 1649 &i_hash_mask,
1650 0,
1650 0); 1651 0);
1651 1652
1652 for (loop = 0; loop < (1U << i_hash_shift); loop++) 1653 for (loop = 0; loop < (1U << i_hash_shift); loop++)
@@ -1677,6 +1678,7 @@ void __init inode_init(void)
1677 0, 1678 0,
1678 &i_hash_shift, 1679 &i_hash_shift,
1679 &i_hash_mask, 1680 &i_hash_mask,
1681 0,
1680 0); 1682 0);
1681 1683
1682 for (loop = 0; loop < (1U << i_hash_shift); loop++) 1684 for (loop = 0; loop < (1U << i_hash_shift); loop++)