struct dentry { atomic_t d_count; /* 使用记数 */ unsigned long d_vfs_flags; /* 目录缓存标志 */ spinlock_t d_lock; /* 单目录项锁 */ struct inode *d_inode; /* 相关索引及诶但 */ struct list_head d_lru; /* 未使用链表 */ struct list_head d_child; /* 副目录中目录项对象的链表 */ struct list_head d_subdirs; /* 子目录*/ struct list_head d_alias; /* 索引节点的别名链表 */ unsigned long d_time; /* 重新声响的时间 */ struct dentry_operations *d_op; /* 目录项操作表 */ struct super_block *d_sb; /* 文件超级块 */ unsigned int d_flags; /* 目录项标识 */ int d_mounted; /* 可能是登陆点的目录项 */ void *d_fsdata; /* 文件系统特殊的数据 */ struct rcu_head d_rcu; /* RCU锁 */ struct dcookie_struct *d_cookie; /* cookie */ struct dentry *d_parent; /* 父目录的目录项对象 */ struct qstr d_name; /*目录项的名字?*/ struct hlist_node d_hash; /* 散列表*/ struct hlist_head *d_bucket; /* 散列表头 */ unsigned char d_iname[DNAME_INLINE_LEN_MIN]; /* 短文件名 */ }; struct dentry_operations { int (*d_revalidate) (struct dentry *, int); /*判断目录对象是否有效*/ int (*d_hash) (struct dentry *, struct qstr *); /*问目录项生成散列表*/ int (*d_compare) (struct dentry *, struct qstr *, struct qstr *); /*VFS调用该函数来比较name1和name2这两个文件名,使用该函数需要家dcache_lock锁。注意fat等不区分大小写的文件系统*/ int (*d_delete) (struct dentry *); /*当目录项对象的d_count计数值等于0时,VFS调用该函数,使用该函数需要家dcache_lock锁*/ void (*d_release) (struct dentry *); /*当目录项对象将要被释放时,VFS调用该函数,默认情况下,什么都不做*/ void (*d_iput) (struct dentry *, struct inode *); /*当目录项对象丢失了其相关的索引节点时,VFS调用该函数。默认情况下VFS会调用iput()函数释放索引节点。如果文件系统重载了该函数,那么除了执行此文件系统的特殊的工作外,还必须调用iput()函数*/ }; |
|小黑屋|最新主题|手机版|微赢网络技术论坛 ( 苏ICP备08020429号 )
GMT+8, 2024-9-30 01:40 , Processed in 0.177524 second(s), 12 queries , Gzip On, MemCache On.
Powered by Discuz! X3.5
© 2001-2023 Discuz! Team.