关于建立hash数组的页数问题
在dcache.c中的 dcache_init中,有这么一段程序:
#if PAGE_SHIFT < 13
mempages >>= (13 - PAGE_SHIFT);
#endif
mempages *= sizeof(struct list_head);
for (order = 0; ((1UL << order) << PAGE_SHIFT) < mempages; order++)
; //order 表示这个hash 数组占用的页数的位数
do {
unsigned long tmp;
nr_hash = (1UL << order) * PAGE_SIZE /
sizeof(struct list_head); //nr_hash等于该数组中可放的个数
d_hash_mask = (nr_hash - 1); // d_hash_mask等于总数值减1
tmp = nr_hash;
d_hash_shift = 0;
while ((tmp >>= 1UL) != 0UL)
d_hash_shift++; //d_hash_shift等于总数值的位数
dentry_hashtable = (struct list_head *)
__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",
nr_hash, order, (PAGE_SIZE << order));
if (!dentry_hashtable)
panic("Failed to allocate dcache hash table\n");
d = dentry_hashtable;
i = nr_hash;
do {
INIT_LIST_HEAD(d);
d++;
i--;
} while (i);
}
我想问的是:1。在ext2中,mempages到底是在什么地方赋值的?
2。“#if PAGE_SHIFT < 13”中“13”代表什么大小?如果自己新创建一个hash数组,这
个值的大小应该怎么定?