1 --- 2.6/fs/inode.c 2003-11-29 09:46:34.000000000 +0100
2 +++ build-2.6/fs/inode.c 2003-11-29 10:19:21.000000000 +0100
7 +static __initdata int ihash_entries;
9 +static int __init set_ihash_entries(char *str)
11 + get_option(&str, &ihash_entries);
12 + if (ihash_entries <= 0) {
19 +__setup("ihash_entries=", set_ihash_entries);
22 * Initialize the waitqueues and inode hash table.
24 @@ -1340,8 +1354,16 @@
25 for (i = 0; i < ARRAY_SIZE(i_wait_queue_heads); i++)
26 init_waitqueue_head(&i_wait_queue_heads[i].wqh);
28 - mempages >>= (14 - PAGE_SHIFT);
29 - mempages *= sizeof(struct hlist_head);
30 + if (!ihash_entries) {
31 + ihash_entries = mempages >> (14 - PAGE_SHIFT);
32 + /* Limit inode hash size. Override for nfs servers
33 + * that handle lots of files.
35 + if (ihash_entries > 1024*1024)
36 + ihash_entries = 1024*1024;
39 + mempages = ihash_entries*sizeof(struct hlist_head);
40 for (order = 0; ((1UL << order) << PAGE_SHIFT) < mempages; order++)
43 --- 2.6/fs/dcache.c 2003-11-29 09:46:34.000000000 +0100
44 +++ build-2.6/fs/dcache.c 2003-11-29 10:53:15.000000000 +0100
45 @@ -1546,6 +1546,20 @@
49 +static __initdata int dhash_entries;
51 +static int __init set_dhash_entries(char *str)
53 + get_option(&str, &dhash_entries);
54 + if (dhash_entries <= 0) {
61 +__setup("dhash_entries=", set_dhash_entries);
63 static void __init dcache_init(unsigned long mempages)
66 @@ -1571,10 +1585,18 @@
68 set_shrinker(DEFAULT_SEEKS, shrink_dcache_memory);
70 + if (!dhash_entries) {
72 - mempages >>= (13 - PAGE_SHIFT);
73 + mempages >>= (13 - PAGE_SHIFT);
75 - mempages *= sizeof(struct hlist_head);
76 + dhash_entries = mempages;
77 + /* 8 mio is enough for general purpose systems.
78 + * For file servers, override with "dhash_entries="
80 + if (dhash_entries > 8*1024*1024)
81 + dhash_entries = 8*1024*1024;
83 + mempages = dhash_entries*sizeof(struct hlist_head);
84 for (order = 0; ((1UL << order) << PAGE_SHIFT) < mempages; order++)