关于linux0.12中的add_entry中bread中的些猜测
来源:互联网 发布:java核心技术卷一 编辑:程序博客网 时间:2024/05/21 15:03
今天看到文件系统namei.c中的add_entry部分了,发现一个问题
block = create_block(dir,i/DIR_ENTRIES_PER_BLOCK);if (!block)return NULL;if (!(bh = bread(dir->i_dev,block))) {i += DIR_ENTRIES_PER_BLOCK;continue;}de = (struct dir_entry *) bh->b_data;可以看到,create_block也是就是当目录的i结点不存在时便会创建一个,而在create_block调用的_bamp(inode.c)函数,而bitmap函数中又调用了new_block(bitmap.c)早对磁盘块做了些测试如下:
for (i=0 ; i<8 ; i++)if (bh=sb->s_zmap[i])if ((j=find_first_zero(bh->b_data))<8192)break;if (i>=8 || !bh || j>=8192)return 0;if (set_bit(j,bh->b_data))panic("new_block: bit already set");bh->b_dirt = 1;j += i*8192 + sb->s_firstdatazone-1;if (j >= sb->s_nzones)return 0;
这也就是说,不可能会出现非法block号,那么bread失败也就无从谈起了!
退一步说:如果真的失败了那
if ((char *)de >= BLOCK_SIZE+bh->b_data)这代码又会产生什么后果呢?
所以,我认为赵博士上面的注释有点小失误,下面的注释才是最合理的解释。
这应该是从find_entry函数中拷过来的,但是由于修改时没有注意到,所以留下的一点冗余代码,
注意!!!是冗余代码不是Bug!这也告诉我们,写代码一般不要copy,否则极易出错!
- 关于linux0.12中的add_entry中bread中的些猜测
- linux0.12中bread函数流程
- 关于linux0.12临界资源的一点理解和猜测
- linux0.12内核中的getblk函数
- 发展中的linux0
- linux0.11中的进程
- 关于编译和运行过程中的字符编码转换的猜测
- Linux0.11内核--8086中的实模式
- uclinux2.6(bf561)中的bootmem分析(1):猜测
- 传说中的“iPhone 5”各种猜测可能是真的
- 猜测在学习新工具中的作用,一个实例
- Linux0.11 由进程睡眠函数sleep_on()中的堆栈变量tmp引发的思考 关于进程内核堆栈
- 关于Meltemi的猜测
- linux0.11中的fork实现和一些注意事项
- 总结linux0.11内核中的主,次设备号
- bochs+Linux0.12中mcopy的用法
- linux0.12中文件系统的一些理解
- 操作系统[linux0.00, linux0.12]
- uchome工作笔记--添加微新闻功能
- SetWindowsHookEx 钩子
- JNI Resources
- Flex 图表打印
- 利用JAVA反射机制访问ITelephony隐藏接口(android程序中挂断电话)
- 关于linux0.12中的add_entry中bread中的些猜测
- linux tar打包解压详解 解压到指定文件夹
- 循环查询无限级的父级
- 系统架构设计之DRY和SHY原则
- poj 3908 Quick answer//并查集
- 使用 Eclipse 插件 Ruby Development Tools
- centos查看CPU、内存、网络流量和磁盘 I/O
- Js中sort()用法
- 扩展欧几里德算法