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



我想获得内核模块中文件系统的文件系统挂载点,这是一个可堆叠的文件系统。如。如果/home/ab/abc是一个文件,而/home挂载在不同的文件系统上,我希望有一个到/home的dentry或路径结构。我想在不修改内核代码的模块中做到这一点。例如,有一个文件在/home/user/,现在我想知道这个文件在哪个分区。例如,该文件可能位于与"/"相同的分区中,或者该文件可能位于挂载在/home或/home/user上的另一个分区中。

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

您可以按照prints /proc/mounts(例如base.c/mountstats_open, namespace.c/m_start)的代码来获取更多细节(例如需要一些锁定)。

我不知道你是否可以在内核模块中做到这一点。

如果有人仍然需要"取消引用";它在结构体路径上操作,并相应地改变它的。mnt 条目。也许有人会发现它很方便!

编辑:我在5.6内核版本中使用过它。我不知道它是否一直可用(<5.6)

最新更新