2017-09-14 55 views
0

我想了解Linux内核的路径行走。下面的情况是如何解决:linux内核路径走。 lookup_slow交代

的路径,

“/ ext3_dir/ext4_dir”

比方说,我们有以下安装的文件系统,ext4_dir是EXT4文件系统的根目录,安装在ext3的目录ext3_dir。

Q1:是否有可能,在对ext4_dir任何时间目录项上不存在目录项缓存,否则将永远在那里安装在ext3的顶部EXT4后?

Q2:如果dcache的丢失的情况是可能的,然后在下面的慢速路径:

link_path_walk->walk_component->lookup_slow()

第一目录项被分配

dentry = d_alloc_parallel(dir, name, &wq);

,然后我们称之为

inode->i_op->lookup(inode, dentry, flags);

它调用实际文件系统函数读取组件的父目录的inode的数据块内,这里ext3_dir。 由于ext3_dir是ext3文件系统,如何ext4的文件系统在这种情况下访问阅读ext4_dir的数据转换成目录项?

谢谢,卡皮尔

回答

1

目录项表示的文件系统的安装点是总是在高速缓存。此外,文件系统的根索引节点始终存在

所以,导航到“/ ext3_dir/ext4_dir”不需要文件系统的功能:两者的dentry和inode与使用VFS缓存中提取。

+0

感谢Tsyvarev的答案。你也知道它是如何强制的,我的意思是我们如何将根dentry固定为dcache。 – Kapil

+0

我不确定,但dentry具有引用计数器字段'd_lockref'。所以,通过增加这个计数器,VFS阻止dentry离开缓存。在任何情况下,固定根dentry是VFS的一项任务,文件系统驱动程序不涉及这一点。 – Tsyvarev