--- linux-2.6.0-test9-mm5/fs/dcache.c.orig Tue Nov 25 15:29:38 2003 +++ linux-2.6.0-test9-mm5/fs/dcache.c Tue Nov 25 16:18:37 2003 @@ -1530,9 +1530,8 @@ static void __init dcache_init(unsigned long mempages) { struct hlist_head *d; - unsigned long order; unsigned int nr_hash; - int i; + int i, order; /* * A constructor could be added for stable state like the lists, @@ -1552,12 +1551,10 @@ set_shrinker(DEFAULT_SEEKS, shrink_dcache_memory); -#if PAGE_SHIFT < 13 - mempages >>= (13 - PAGE_SHIFT); -#endif - mempages *= sizeof(struct hlist_head); - for (order = 0; ((1UL << order) << PAGE_SHIFT) < mempages; order++) - ; + mempages = (mempages * sizeof(struct hlist_head)) >> 13; + order = fls(mempages); + if (order > 12) + order = 12; do { unsigned long tmp; @@ -1575,7 +1572,7 @@ __get_free_pages(GFP_ATOMIC, order); } while (dentry_hashtable == NULL && --order >= 0); - printk(KERN_INFO "Dentry cache hash table entries: %d (order: %ld, %ld bytes)\n", + printk(KERN_INFO "Dentry cache hash table entries: %d (order: %d, %ld bytes)\n", nr_hash, order, (PAGE_SIZE << order)); if (!dentry_hashtable) --- linux-2.6.0-test9-mm5/fs/inode.c.orig Tue Nov 25 15:33:22 2003 +++ linux-2.6.0-test9-mm5/fs/inode.c Tue Nov 25 16:17:38 2003 @@ -1319,17 +1319,16 @@ void __init inode_init(unsigned long mempages) { struct hlist_head *head; - unsigned long order; unsigned int nr_hash; - int i; + int i, order; for (i = 0; i < ARRAY_SIZE(i_wait_queue_heads); i++) init_waitqueue_head(&i_wait_queue_heads[i].wqh); - mempages >>= (14 - PAGE_SHIFT); - mempages *= sizeof(struct hlist_head); - for (order = 0; ((1UL << order) << PAGE_SHIFT) < mempages; order++) - ; + mempages = (mempages * sizeof(struct hlist_head)) >> 14; + order = fls(mempages); + if (order > 12) + order = 12; do { unsigned long tmp; @@ -1347,7 +1346,7 @@ __get_free_pages(GFP_ATOMIC, order); } while (inode_hashtable == NULL && --order >= 0); - printk("Inode-cache hash table entries: %d (order: %ld, %ld bytes)\n", + printk("Inode-cache hash table entries: %d (order: %d, %ld bytes)\n", nr_hash, order, (PAGE_SIZE << order)); if (!inode_hashtable)