<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 할당 받고 초기화한다.