免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2471 | 回复: 3
打印 上一主题 下一主题

VFS path_walk中cached_lookup()里的Bug? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-10-13 12:32 |只看该作者 |倒序浏览
最近在看2.4内核VFS部分的代码,看到path_walk里边通过cached_lookup在内存中查找dentry的时候,感觉cached_lookup里边有一个地方是不是一个Bug?

cached_lookup()的代码:

  1. static struct dentry * cached_lookup(struct dentry * parent, struct qstr * name, int flags)
  2. {
  3.         struct dentry * dentry = d_lookup(parent, name);

  4.         if (dentry && dentry->d_op && dentry->d_op->d_revalidate) {
  5.                 if (!dentry->d_op->d_revalidate(dentry, flags) && !d_invalidate(dentry)) {
  6.                         dput(dentry);
  7.                         dentry = NULL;
  8.                 }
  9.         }
  10.         return dentry;
  11. }
复制代码

在d_revalidate验证dentry不可用的情况下,需要d_invalidate来释放该dentry的时候,如果dentry忙,没有成功释放,那么还是会将这个不可用的dentry返回,这个地方会不会是一个Bug呢?

在看d_invalidate()函数的内容:


  1. …………

  2.         if (atomic_read(&dentry->d_count) > 1) {
  3.                 if (dentry->d_inode && S_ISDIR(dentry->d_inode->i_mode)) {
  4.                         spin_unlock(&dcache_lock);
  5.                         return -EBUSY;
  6.                 }
  7.         }

  8. …………

复制代码


虽然在计数器大于1,也就是有其地方在使用这个dentry时,但也要该dentry对应的inode有效,且描述的是一个目录时,才返回BUSY,此时cached_lookup就返回了一个文件系统认为不可用的dentry给path_walk。这究竟是一个Bug,还是在内核的其他地方有补充来避免这种现象?

小弟对内核VFS这部分了解的不够全面,希望大家帮忙。

论坛徽章:
0
2 [报告]
发表于 2007-10-14 14:10 |只看该作者
原帖由 Benson_linux 于 2007-10-13 12:32 发表
最近在看2.4内核VFS部分的代码,看到path_walk里边通过cached_lookup在内存中查找dentry的时候,感觉cached_lookup里边有一个地方是不是一个Bug?

cached_lookup()的代码:

static struct dentry * cache ...

我对VFS不了解。但如果你在老版本的kernel里发现你认为是bug的地方,应该去搜索一下,或查看新的版本,因为它很可能就是个bug。
以前一个朋友也遇到过这种情况,发现是个bug,一搜,在新版本里已经fix掉了

论坛徽章:
0
3 [报告]
发表于 2007-10-15 15:17 |只看该作者
谢谢,我看一下kernel2.6里边的代码是在怎么写的

论坛徽章:
0
4 [报告]
发表于 2007-10-15 15:22 |只看该作者
刚看了kernel2.6的代码,这部分的代码虽然修改了,但是逻辑还是没有变,看来可能是某些地方有约束。

希望知道的能说说。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP