<kernel v5.0>
VFS 캐시 초기화
vfs_caches_init_early()
fs/dcache.c
void __init vfs_caches_init_early(void)
{
int i;
for (i = 0; i < ARRAY_SIZE(in_lookup_hashtable); i++)
INIT_HLIST_BL_HEAD(&in_lookup_hashtable[i]);
dcache_init_early();
inode_init_early();
}
vfs(virtual file system)에서 사용되는 각종 해시 테이블들을 초기화한다.
dcache_init_early()
fs/dcache.c
static void __init dcache_init_early(void)
{
/* If hashes are distributed across NUMA nodes, defer
* hash allocation until vmalloc space is available.
*/
if (hashdist)
return;
dentry_hashtable =
alloc_large_system_hash("Dentry cache",
sizeof(struct hlist_bl_head),
dhash_entries,
13,
HASH_EARLY | HASH_ZERO,
&d_hash_shift,
NULL,
0,
0);
d_hash_shift = 32 - d_hash_shift;
}
Dentry 캐시 해시 리스트를 memblock에 early 할당 받고 초기화한다.
inode_init_early()
fs/inode.c
/* * Initialize the waitqueues and inode hash table. */
void __init inode_init_early(void)
{
/* If hashes are distributed across NUMA nodes, defer
* hash allocation until vmalloc space is available.
*/
if (hashdist)
return;
inode_hashtable =
alloc_large_system_hash("Inode-cache",
sizeof(struct hlist_head),
ihash_entries,
14,
HASH_EARLY | HASH_ZERO,
&i_hash_shift,
&i_hash_mask,
0,
0);
}
Inode 캐시 해시 리스트를 memblock에 early 할당 받고 초기화한다.