码迷,mamicode.com
首页 > 其他好文 > 详细

f2fs解析(三)NAT中如何区分inode和其他dnode

时间:2015-09-15 00:05:50      阅读:247      评论:0      收藏:0      [点我收藏+]

标签:

 首先,我们要知道NAT中的每个表项都对应着MAIN AREA区域中NODE段的一个block,还要知道NODE block很特别,block末尾会有一个node footer结构:

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了。

f2fs解析(三)NAT中如何区分inode和其他dnode

标签:

原文地址:http://www.cnblogs.com/honpey/p/4808897.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!