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()来创建的


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值