linux内核路径遍历。 lookup_slow 说明
linux kernel path walk. lookup_slow explaination
我正在尝试了解 linux 内核路径遍历。下面的案例是如何解决的:
对于路径,
"/ext3_dir/ext4_dir"
假设我们有以下挂载的文件系统,ext4_dir 是 ext4 文件系统的根,挂载在 ext3 目录 ext3_dir 上。
问题 1:ext4_dir 的 dentry 是否可能在任何时候都不存在于 dentry 缓存中,或者在 ext4 安装到 ext3 之上后它会一直存在?
Q2:如果 dcache miss case 是可能的,那么在下面的慢路径中:
link_path_walk->walk_component->lookup_slow()
第一个 dentry 已分配
dentry = d_alloc_parallel(dir, name, &wq);
然后我们调用
inode->i_op->lookup(inode, dentry, flags);
调用实际文件系统函数读取父目录inode数据块内的组件,这里ext3_dir。
由于 ext3_dir 在 ext3 文件系统中,在这种情况下如何访问 ext4 文件系统以将 ext4_dir 的数据读入 dentry?
谢谢,卡皮尔
代表文件系统挂载点的 Dentry 总是在缓存中。此外,文件系统的根索引节点始终存在。
因此,不需要文件系统的功能来导航到“/ext3_dir/ext4_dir”:dentry 和 inode 都是使用 VFS 缓存提取的。
我正在尝试了解 linux 内核路径遍历。下面的案例是如何解决的:
对于路径,
"/ext3_dir/ext4_dir"
假设我们有以下挂载的文件系统,ext4_dir 是 ext4 文件系统的根,挂载在 ext3 目录 ext3_dir 上。
问题 1:ext4_dir 的 dentry 是否可能在任何时候都不存在于 dentry 缓存中,或者在 ext4 安装到 ext3 之上后它会一直存在?
Q2:如果 dcache miss case 是可能的,那么在下面的慢路径中:
link_path_walk->walk_component->lookup_slow()
第一个 dentry 已分配
dentry = d_alloc_parallel(dir, name, &wq);
然后我们调用
inode->i_op->lookup(inode, dentry, flags);
调用实际文件系统函数读取父目录inode数据块内的组件,这里ext3_dir。 由于 ext3_dir 在 ext3 文件系统中,在这种情况下如何访问 ext4 文件系统以将 ext4_dir 的数据读入 dentry?
谢谢,卡皮尔
代表文件系统挂载点的 Dentry 总是在缓存中。此外,文件系统的根索引节点始终存在。
因此,不需要文件系统的功能来导航到“/ext3_dir/ext4_dir”:dentry 和 inode 都是使用 VFS 缓存提取的。