C 为什么装载结构有两个装载点字段?

C 为什么装载结构有两个装载点字段?,c,linux,linux-kernel,filesystems,C,Linux,Linux Kernel,Filesystems,我想了解linux文件系统是如何工作的struct mount具有mnt\u mountpoint字段,该字段指向挂载点dentry并用于路径查找 struct mount { /*...*/ struct dentry *mnt_mountpoint; /*...*/ struct mountpoint *mnt_mp; /*...*/ } 此时我不明白第二个mountpoint字段的用途是什么?它指向mountpoint结构,而该结构又有指向另一个

我想了解linux文件系统是如何工作的
struct mount
具有
mnt\u mountpoint
字段,该字段指向挂载点dentry并用于路径查找

struct mount {
    /*...*/
    struct dentry *mnt_mountpoint;
    /*...*/
    struct mountpoint *mnt_mp;
    /*...*/
} 
此时我不明白第二个mountpoint字段的用途是什么?它指向
mountpoint
结构,而该结构又有指向另一个mountpoint dentry
m_dentry
的指针

struct mountpoint {
    struct hlist_node m_hash;
    struct dentry *m_dentry;
    struct hlist_head m_list;
    int m_count;
};
图中还显示了struct mountpoint。曾几何时,它曾经是一部分 of struct dentry-给定装入点上所有装入的列表。自从 为了一小笔钱而把每一个牙齿都塞满是没有意义的 那个分数将成为任何人的挂载点,那个东西被分离了

我们拥有的是

  • 为已安装的假牙设置的假牙标记(
    DCACHE\u MOUNTED
    ) 当前装入点
  • 对于其中的每一个,我们都有一个struct mountpoint实例(确切地说 每种假牙一颗)

所有装入点都存储在哈希表中,而不是具有列表指针的
struct dentry
m_dentry
字段用于区分落入同一散列桶中的不同装入点

我猜
struct mount
包含对
struct mountpoint
的引用,主要用于清理。也就是说,当
struct mount
被销毁时,我们称之为
put\u mountpoint(mnt\u mp)
m_计数
递减,如果达到零,则装入点被销毁