linux内核路径行走。缓慢解释

linux内核路径行走。缓慢解释,linux,filesystems,kernel,ext4,ext3,Linux,Filesystems,Kernel,Ext4,Ext3,我试图理解linux内核路径行走。如何解决以下情况: 对于路径 “/ext3\u dir/ext4\u dir” 假设我们安装了以下文件系统,ext4_dir是ext4文件系统的根,安装在ext3目录ext3_dir上 问题1:是否有可能在任何时候,dentry for ext4_dir都不在dentry缓存中,或者在ext4安装到ext3之上之后,它始终在那里 问题2:如果dcache未命中的情况是可能的,那么在下面的慢路径中: link\u path\u walk->walk\u compo

我试图理解linux内核路径行走。如何解决以下情况:

对于路径

“/ext3\u dir/ext4\u dir”

假设我们安装了以下文件系统,ext4_dir是ext4文件系统的根,安装在ext3目录ext3_dir上

问题1:是否有可能在任何时候,dentry for ext4_dir都不在dentry缓存中,或者在ext4安装到ext3之上之后,它始终在那里

问题2:如果dcache未命中的情况是可能的,那么在下面的慢路径中:

link\u path\u walk->walk\u component->lookup\u slow()

一等车费已分配

dentry=d_alloc_parallel(dir、name和wq)

然后我们打电话

inode->i_op->查找(inode、dentry、flags)

它调用实际的文件系统函数来读取父目录的inode的数据块内的组件,这里是ext3_dir。 由于ext3_dir位于ext3文件系统中,在这种情况下如何访问ext4文件系统以将ext4_dir的数据读入dentry


谢谢,Kapil

Dentry表示文件系统的装入点总是在缓存中。此外,文件系统的根inode始终存在


因此,导航到“/ext3_dir/ext4_dir”不需要文件系统的函数:dentry和inode都是使用VFS缓存提取的。

感谢Tsyvarev的回答。您还知道它是如何强制执行的吗?我的意思是如何将根dentry固定到dcache。我不确定,但dentry具有reference counter字段
d_lockref
。因此,通过增加此计数器,VFS可以防止dentry离开缓存。无论如何,固定根dentry是VFS的任务,文件系统驱动程序不参与其中。