vfs dcache函数

vfs dcache函数在 2 6 32 内核中 vfs 的 dcache c 文件中 用 EXPORT SYMBOL 导出了一系列函数 供内核 文件系统程序使用 1 EXPORT SYMBOL d alloc structdentry d alloc structdentry parent conststructq name 根据父目录的 dentry 以及文件本身的 qstr 结构体

在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

(0)
上一篇 2026年3月26日 下午3:47
下一篇 2026年3月26日 下午3:48


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号