您的位置:首页 > Web前端 > Node.js

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

2015-09-14 23:37 1246 查看
首先,我们要知道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了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: