在2.6.32内核中,vfs的dcache.c文件中,用EXPORT_SYMBOL导出了一系列函数,供内核、文件系统程序使用。
1. EXPORT_SYMBOL(d_alloc);
struct dentry *d_alloc(struct dentry * parent, const struct qstr *name)
2.EXPORT_SYMBOL(d_alloc_root);
struct dentry * d_alloc_root(struct inode * root_inode)
struct dentry * d_find_alias(struct inode *inode)
5.EXPORT_SYMBOL(d_instantiate);
void d_instantiate(struct dentry *entry, struct inode * inode)
int d_invalidate(struct dentry * dentry)
struct dentry * d_lookup(struct dentry * parent, struct qstr * name)
根据name和父节点的dentry,对文件进行lookup操作,从而获得子目录或子文件的dentry
8.EXPORT_SYMBOL(d_move)
void d_move(struct dentry * dentry, struct dentry * target)
9.EXPORT_SYMBOL_GPL(d_materialise_unique);
char *d_path(const struct path *path, char *buf, int buflen)
由path结构体获得全路径,保存在缓存buf中,而path结构体存在file指针中
void d_prune_aliases(struct inode *inode)
将跟当前inode对应的所有dentry释放掉,这里再重复一下dentry跟inode的关系,一个inode可能会对应多个路径(别名,硬链接的情况),当从一个路径访问下来后,就会生成一个dentry,这些dentry都通过inode的下的i_dentry链表挂在一起。
12.EXPORT_SYMBOL(d_rehash);
void d_rehash(struct dentry * entry)
讲一个dentry加入到哈希链表中,其中的哈希值是由dentry的文件名、父目录dentry的指针计算出来的,具体见d_hash函数
struct dentry *d_splice_alias(struct inode *inode, struct dentry *dentry)
将一个inode与一个负状态的dentry绑定,在这个函数内部,首先要判断inode是否为目录,如果是目录的话,调用__d_find_alias函数搜索一个别名dentry(注意,目录是没有硬链接的),如果找到(说明这个inode的dentry曾经被使用过,而后来dentry变为负状态,但里面的很多内容还可以利用),调用d_rehash更新hash值, 并调用d_move将这个别名dentry的内容移动需要的dentry上。如果__d_find_alias没有找到结果,说明这个inode没有对应的别名dentry,需要调用__d_instantiate、d_rehash将inode绑定到dentry上。如果inode是一个文件的话,直接使用d_add将inode与dentry绑定
14.EXPORT_SYMBOL(d_put)
void dput(struct dentry *dentry)
15.EXPORT_SYMBOL(d_add_ci)
struct dentry* d_add_ci(struct dentry * dentry, struct inode *inode, struct qstr *name)
注释为:
这个函数用在对大小不敏感的文件系统(比如ntfs),将大小写不敏感的文件名加入到dentry
16.EXPORT_SYMBOL(find_inode_number)
根据文件名,找到它的ino号,需要提供该文件的父目录的dentry指针
int have_submounts(struct dentry *parent)
检查parent的目录下是否存在挂载点,返回0说明parent下的子目录中,没有挂载点,返回1说明其下可能存在挂载点
18.EXPORT_SYMBOL(shrink_dcache_parent)
void shrink_dcache_parent(struct dentry * parent)
将parent及其子目录、子文件的dentry,从缓存中踢出
void shrink_dcache_sb(struct super_block * sb)
20.EXPORT_SYMBOL(d_validate);
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/179349.html原文链接:https://javaforall.net
