我知道当我们调用open时,linux内核中的slub中会有一个struct文件。我想知道那个结构的地址。所以我需要找到它分配该结构的kmalloc
。但我找不到它。我认为它会像fs/open.c
那样,但没有kmalloc
。谁能帮我?感谢。
答案 0 :(得分:0)
open
系统调用(在fs/open.c
中)调用do_sys_open
。在那里,第一个struct file
相关的行是
struct file *f = do_filp_open(dfd, tmp, &op);
{p> do_filp_open
在fs/namei.c
中定义,并调用path_openat
以获取它返回的struct file *
。在该函数中,通过获得空struct file *
file = get_empty_filp();
get_empty_filp
(来自fs/file_table.c
)使用kmem_cache_zalloc
分配归零内存with caching,然后初始化struct file
(包括所有锁等)