Linux内核dentry和inode

Linux内核dentry和inode,linux,linux-kernel,Linux,Linux Kernel,是否可以从给定的dentry和inode构造绝对路径 谢谢大家如果你有一个结构路径(或者可以构造一个),看看tomoyo是如何做到这一点的: 看看dentry\u path()。它将使用到装载根目录的路径填充缓冲区。要继续通过它,您需要遍历文件的f\u vfsmount和它的mnt\u parents,直到到达文件系统的真正根。是的,只要一个dentry就足够了,通过dentry->parent进行反向遍历。 遇到挂载点时要小心,因为linux支持“一个dentry挂载多个设备”。。。很容易编写

是否可以从给定的dentry和inode构造绝对路径


谢谢大家

如果你有一个
结构路径
(或者可以构造一个),看看tomoyo是如何做到这一点的:

看看
dentry\u path()
。它将使用到装载根目录的路径填充缓冲区。要继续通过它,您需要遍历文件的
f\u vfsmount
和它的
mnt\u parent
s,直到到达文件系统的真正根。

是的,只要一个dentry就足够了,通过dentry->parent进行反向遍历。 遇到挂载点时要小心,因为linux支持“一个dentry挂载多个设备”。。。很容易编写代码,只需切换到vfsmnt->mnt\u parent即可


顺便说一句:我经常感到困惑,为什么linux会用一个字段“mnt_parent”而不是“mnt_child”来构建挂载点链接列表,在写这个答案时,我似乎猜到了一些事情。

你能迭代地提升
d_parent
并跟踪
d_name
?是的,这是可能的,我已经做到了。。。但是,如果给定的dentry是一个挂载的文件系统(来自USB、NFS或其他任何文件系统),那么d_父文件将停止,直到该文件系统的根文件。。。假设,/dev/sda1安装在/tmp/a/b/c/d/e/(/dev/sda1的根目录下),最顶端的d_父值将位于“e”之后directory@Billy“你希望有不同的解决办法吗?”比利,我明白了。也许您必须检查
vfsmount
。是否要处理chroot和privot root?