在内核模块中获取文件系统挂载点

时间:2012-01-02 14:56:33

标签: linux filesystems linux-kernel kernel-module

我想在我的内核模块中获取文件系统的文件系统挂载点,这是一个可堆叠的文件系统。 例如。如果/ home / ab / abc是一个文件,并且/ home安装在不同的文件系统上,我想要一个dentry或path结构到/ home。 我想在模块中执行此操作而不修改内核代码。 例如/ home / user /中有一个文件,现在我想知道这个文件在哪个分区。例如,此文件可能位于与“/”相同的分区中,或者此文件可能位于/ home或/ home / user上的另一个分区中。

3 个答案:

答案 0 :(得分:7)

您可以从current->namespace获取文件系统列表。通过迭代current->namespace->list(项目为struct vfsmount),您可以获得所有已安装的文件系统。 vfsmount->mnt_mountpoint是您想要的目录条目。

您可以按照prints /proc/mounts(例如base.c/mountstats_opennamespace.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)