- 论坛徽章:
- 0
|
embeddedlwp 发表于 2012-12-03 09:52 ![]()
ext2_write_begin函数,为什么一定要对新分配的page建立buffer cache呢?
ULK3上说,使用buffer page的情况:
- when reading or writing pages of a file that are not stored in contiguous disk blocks. This happenes either because the filesystem
has allocated noncontiguous blocks to the file, or because the file contains "hole"
- when accessing a single disk block(for instance, when reading a superblock or an inode block).
那么某次调用到ext2_write_begin不一定是这两种情况吧? 为什么要建立buffer page呢?
好问题啊,kernel读文件确实按照这样的规则来处理的。
但是,写文件的话,如果page不再内存,kernel是通过buffer head来分别读取整个page的。然后,wait_on_buffer等待所有buffer完成读取。
看了代码,感觉用page方式读取好像也行,但是这样buffer head读取看起来代码比较简单容易处理点。
性能方便估计还好,虽然每个page都通过多个bio(buffer head)提交出去的,后面make_request的时候,如果他们是连续的话,还是会被合并到同一个request中去的(不同的bio)。一个request驱动只要处理一次就ok了。
而且,直接写文件情况应该不多巴。一般先读后写的比较多。
最近,忙于但疼的比较寄存器工作,羡慕bz阿- -
|
|