f2fs解析(三)NAT中如何区分inode和其他dnode
2015-09-14 23:37
1246 查看
首先,我们要知道NAT中的每个表项都对应着MAIN AREA区域中NODE段的一个block,还要知道NODE block很特别,block末尾会有一个node footer结构:
区分一个NODE block里是inode还是普通的dnode,只要比较footer中的nid和ino两个域就可以了,二者如果相等那么这个block里面就是个inode,否则就是普通的dnode。
还要说一点,新建一个文件的时候,会从VFS层分配一个inode,但是这个inode结构的 ino 是不确定的,需要f2fs给它一个值,这个值f2fs通过alloc_nid函数获得,从可用的nid的选择一个,把这个值作为新申请的文件的ino,这样一来,inode的ino和nid就成一样的了,但是对于普通dnode来说,nid还是分配的这个nid,但是ino必须要赋值成文件的ino了。
243 struct node_footer { 244 __le32 nid; /* node id */ 245 __le32 ino; /* inode nunmber */ 246 __le32 flag; /* include cold/fsync/dentry marks and offset */ 247 __le64 cp_ver; /* checkpoint version */ 248 __le32 next_blkaddr; /* next node page block address */ 249 } __packed;
区分一个NODE block里是inode还是普通的dnode,只要比较footer中的nid和ino两个域就可以了,二者如果相等那么这个block里面就是个inode,否则就是普通的dnode。
还要说一点,新建一个文件的时候,会从VFS层分配一个inode,但是这个inode结构的 ino 是不确定的,需要f2fs给它一个值,这个值f2fs通过alloc_nid函数获得,从可用的nid的选择一个,把这个值作为新申请的文件的ino,这样一来,inode的ino和nid就成一样的了,但是对于普通dnode来说,nid还是分配的这个nid,但是ino必须要赋值成文件的ino了。
相关文章推荐
- nodejs安装配置
- LeetCode-Delete Node in a Linked List
- Wow6432Node
- nodejs优化
- [SD喜爱语言PK大赛]001.PHP vs Node.js
- nodejs body-parser不支持charset=GBK,报415错误问题
- 基于Nodejs的前端单元测试(2)—mocha + require.js
- nodejs发送邮件
- leetcode 237: Delete Node in a Linked List
- nodejs模块hashmap
- Express作者TJ告别Node.js奔向Go
- Node.js 4.0 中的 ES 6 特性介绍
- node.js在windows下的安装与配置(附sublime-text的配置)
- nodejs 捕获未处理异常
- children和childNodes
- nodejs创建服务器和利用express创建服务器
- nodejs+express的简单示例
- Nodejs课堂笔记-第六课 在DynamoDB中如何创建表
- MonoDevelop几个常用的快捷键
- Node.js开发入门—套接字(socket)编程