vfsmount和dentry之间的关系

对于每一个 mount 的文件系统,都由一个 vfsmount 结构来表示。
对于每一个目录项,都用一个dentry来表示,例如对于/usr/local/lib : / usr local lib 表示4个目录项

两者关系以一个例子来说明:
例如我们要mount一个设备 /dev/sdb1 到 /home/my目录下,
我们假设 /home/my 就是当前进程的根文件系统中的目录(即 home 和 my 都没有mount任何文件系统),
命令行是: mount -t ext2 /dev/sdb1 /home/my
我们mount的时候,传入的参数有三个: 要mount的设备( /dev/sdb1 ) , 设备的文件系统 ( ext2 之类的), mount到什么目录 ( /home/my )

mount的过程就是把设备的文件系统入到 vfs 框架
1. 首先,要mount一个新的设备,需要创建一个新的 super block。 这通过要mount的文件系统的 file_system_type, 调用其 get_sb 方法来创建一个新的 super block。
2. 需要创建一个新的vfsmount ,对于任何一个 mount 的文件系统,都要有一个 vfsmount, 创建这个vfsmount, 并设置好vfsmount 中的各个成员
3. 将创建好的 vfsmount 加入到系统中。

对于新的vfsmount:
其mountpoint为目录 "my" 的dentry,
其mnt_root 是设备sdb1上的根目录的 dentry
其父 vfsmount 就是原文件系统中的那个 vfsmount

原文地址:https://www.cnblogs.com/linengier/p/2991112.html