diff options
author | Dimitri Sivanich <sivanich@sgi.com> | 2012-02-08 12:39:07 -0800 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2012-02-13 20:45:38 -0500 |
commit | 074b85175a43a23fdbde60f55feea636e0bf0f85 (patch) | |
tree | e6f6fdd82854b2bf25ea5b404cee010806a8fced /mm/page_alloc.c | |
parent | 1d6f2097865e64963e90cce04980dce2f9fc023f (diff) | |
download | linux-stable-074b85175a43a23fdbde60f55feea636e0bf0f85.tar.gz linux-stable-074b85175a43a23fdbde60f55feea636e0bf0f85.tar.bz2 linux-stable-074b85175a43a23fdbde60f55feea636e0bf0f85.zip |
vfs: fix panic in __d_lookup() with high dentry hashtable counts
When the number of dentry cache hash table entries gets too high
(2147483648 entries), as happens by default on a 16TB system, use of a
signed integer in the dcache_init() initialization loop prevents the
dentry_hashtable from getting initialized, causing a panic in
__d_lookup(). Fix this in dcache_init() and similar areas.
Signed-off-by: Dimitri Sivanich <sivanich@sgi.com>
Acked-by: David S. Miller <davem@davemloft.net>
Cc: Al Viro <viro@zeniv.linux.org.uk>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'mm/page_alloc.c')
-rw-r--r-- | mm/page_alloc.c | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/mm/page_alloc.c b/mm/page_alloc.c index d2186ecb36f7..a13ded1938f0 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -5236,6 +5236,7 @@ void *__init alloc_large_system_hash(const char *tablename, max = ((unsigned long long)nr_all_pages << PAGE_SHIFT) >> 4; do_div(max, bucketsize); } + max = min(max, 0x80000000ULL); if (numentries > max) numentries = max; |