IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    What is dentry

    Adam Lee发表于 2014-04-02 16:00:00
    love 0

    dentry, 既directory entry的缩写, 是Linux VFS中用来管理树状目录的结构, 在内存中生成, 并不存在于实际的文件系统中.

    dentry的结构

    dentry结构的定义(linux/include/dcache.h)如下:

    struct dentry {
            /* RCU lookup touched fields */
            unsigned int d_flags;           /* protected by d_lock */
            seqcount_t d_seq;               /* per dentry seqlock */
            struct hlist_bl_node d_hash;    /* lookup hash list */
            struct dentry *d_parent;        /* parent directory */
            struct qstr d_name;
            struct inode *d_inode;          /* Where the name belongs to - NULL is
                                             * negative */
            unsigned char d_iname[DNAME_INLINE_LEN];        /* small names */
    
            /* Ref lookup also touches following */
            struct lockref d_lockref;       /* per-dentry lock and refcount */
            const struct dentry_operations *d_op;
            struct super_block *d_sb;       /* The root of the dentry tree */
            unsigned long d_time;           /* used by d_revalidate */
            void *d_fsdata;                 /* fs-specific data */
    
            struct list_head d_lru;         /* LRU list */
            /*
             * d_child and d_rcu can share memory
             */
            union {
                    struct list_head d_child;       /* child of parent list */
                    struct rcu_head d_rcu;
            } d_u;
            struct list_head d_subdirs;     /* our children */
            struct hlist_node d_alias;      /* inode alias list */
    };
    

    这其中比较基本和重要的成员是d_parent, d_child, d_name和d_inode, 分别用来记录上级目录, 下级成员(如果当前dentry为目录文件), 文件名以及所指向的inode.

    dentry如何形成树状结构

    区别于记录文件数据的inode, dentry只用来记录文件的组织和管理信息. 路径就是由多个dentry连接而成的, 例如/home/user/foo路径中的根目录/, 目录home, 目录user和文件foo各自都是一个dentry结构. 所有的dentry索引起来就形成了文件系统的树状结构.



沪ICP备19023445号-2号
友情链接