我想在我的内核模块中获取文件系统的文件系统挂载点,这是一个可堆叠的文件系统。 例如。如果/ home / ab / abc是一个文件,并且/ home安装在不同的文件系统上,我想要一个dentry或path结构到/ home。 我想在模块中执行此操作而不修改内核代码。 例如/ home / user /中有一个文件,现在我想知道这个文件在哪个分区。例如,此文件可能位于与“/”相同的分区中,或者此文件可能位于/ home或/ home / user上的另一个分区中。
答案 0 :(得分:7)
您可以从current->namespace
获取文件系统列表。通过迭代current->namespace->list
(项目为struct vfsmount
),您可以获得所有已安装的文件系统。 vfsmount->mnt_mountpoint
是您想要的目录条目。
您可以按照prints /proc/mounts
(例如base.c/mountstats_open
,namespace.c/m_start
)的代码获取更多详细信息(例如需要锁定)。
然而,我不知道你是否可以在内核模块中这样做。
答案 1 :(得分:1)
你可以从这段代码中获得指向vfsmount结构的指针
http://copilotco.com/mail-archives/security-module.2003/msg00627.html
答案 2 :(得分:0)
如果某人仍然需要“取消引用”给定路径到其安装点,则可以使用follow_up函数来完成此工作:)它在 struct path 上运行并将其相应地更改为其 .mnt 条目。也许有人会觉得方便!
编辑:我在5.6内核版本中使用过它。我不知道它是否总是可用(<5.6)