博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
f2fs 系列之七:page cache相关操作和接口
阅读量:6268 次
发布时间:2019-06-22

本文共 943 字,大约阅读时间需要 3 分钟。

同ext4 一样, f2fs 把不需要sync的写通过page cache的接口落盘。为此,有必要了解f2fs中 page cache相关的接口。

以读为例:

do_read_inode依据inode节点号,将inode所在的磁盘block读到页缓存,该block恰好对应着页缓存中的一个page,对page进行F2FS_INODE转换,转换成f2fs_inode结构。最后使用f2fs_inode 对inode初始化。

我们接着深入get_node_page函数,看看f2fs是如何读取磁盘block的。

__get_node_page函数。

该函数首先调用grab_cache_page查找address_space中是否有inode索引节点号对应的page,如果没有则创建一个新的page插入到页缓存中。紧接着调用read_node_page从磁盘中读取inode对应的block,将block数据放到刚刚创建的page中,最后返回读取到的page。

进入read_node_page。

该函数首先构造bio所需的信息,将信息填充在f2fs_io_info中,并调用get_node_info获得node信息,放到node_info中。最后调用f2fs_submit_page_bio提交bio请求,从磁盘中读取block到page中。

f2fs有三种inode,meta_inode,node_inode和普通的文件inode,前两种inode只存在于vfs层,且数量只有一个。meta_inode对应于SIT,NAT,SSA,checkpoint和super block这些文件系统元数据,node inode对应于main area的node segment的数据,普通文件inode读写的区域对应于main area的data segment。所以,所有的f2fs数据的读写都是通过vfs层的inode的。这些inode的保存在f2fs_sb_info中,在文件系统初始化时f2fs_fill_super生成。再看inode的初始化过程,在函数inode.c/f2fs_iget中:

转载于:https://blog.51cto.com/xiamachao/2349595

你可能感兴趣的文章
Yacc 与 Lex 快速入门
查看>>
Unity中HDR外发光的使用
查看>>
Flume负载均衡配置
查看>>
Ajax详解
查看>>
Ubuntu C/C++开发环境的安装和配置
查看>>
百世汇通快递地区选择插件,单独剥离
查看>>
Linux系统调用---同步IO: sync、fsync与fdatasync【转】
查看>>
【MyBatis学习06】输入映射和输出映射
查看>>
[LeetCode] Decode String 解码字符串
查看>>
数字逻辑的一些基本运算和概念
查看>>
ant重新编译打包hadoop-core-1.2.1.jar时遇到的错
查看>>
【★★★★★】提高PHP代码质量的36个技巧
查看>>
3 weekend110的配置hadoop(格式化) + 一些问题解决 + 未免密码配置
查看>>
JavaScript Creating 对象
查看>>
Java compiler level does not match the version of the installed Java project facet.(转)
查看>>
WPF MediaElement.Position属性
查看>>
sqoop数据迁移(基于Hadoop和关系数据库服务器之间传送数据)
查看>>
spring mysql多数据源配置
查看>>
[React] Override webpack config for create-react-app without ejection
查看>>
检索 COM 类工厂中 CLSID 为{00024500-0000-0000-C000-000000000046} 的组件时失败,原因是出现以下错误: 80070005。...
查看>>