denry相关的各种hash函数

d_hash(dentry,hash) 为散列函数 , 它将 dentry 地址和 hash 值相组合, 映射到 dentry_hashtable 表中 , 返回相应的散列链 ;

在底层文件系统的i_op中也有一个同名的d_hash函数,这个函数仅用来计算目录项对应的散列值;

d_rehash(dentry) 将 dentry 加入散列表 ;

d_drop(dentry) 将 dentry 从散列表中删除 ;

d_lookup(dentry,qstr) 在散列中找出以 dentry 作为父目录项 , 名称为qstr 的目录项,他实际上是下面的__d_lookup函数的封装函数

路径名解析:

do_lookup()(该函数是在link_path_walk函数中for循环的查找操作)—>__d_lookup(dentry,qstr)在散列表中查找制定的目录项

real_lookup(dentry,qstr,nameidata)在缓存中无法找到指定的目录项,那就创建该目录项,通过底层文件系统函数lookup从磁盘读,lookup在读目录项的过程中,也把该目录项对应的inode结构从磁盘读出来,并赋值给dentry的d_inode字段;

lookup_hash(&nd)->__lookup_hash(qstr,dentry,nameidata)首先在缓存中查找指定的目录项,如果不存储在,就创建一个新的目录项,并调用底层文件系统i_op中的lookup函数从磁盘读取该目录项,如果lookup函数没有在磁盘找到对应的dentry,就把新建的dentry返回,此时lookup_hash函数还没有建立该目录项对应的inode结构,这是通过继续调用open_namei_creat()—>vfs_creat()->i_op->creat()来创建的


你可能感兴趣的:(denry相关的各种hash函数)