zoukankan      html  css  js  c++  java
  • f2fs解析(三)NAT中如何区分inode和其他dnode

     首先,我们要知道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了。

  • 相关阅读:
    Alpha 冲刺报告6
    课堂小测(同学录)
    Alpha 冲刺报告5
    alphe4
    Alpha 冲刺报告3
    软件工程实践2017第二次作业
    软件工程实践2017第一次作业
    面向对象程序设计 第六次作业
    1025 反转链表(待完善)
    面向对象程序设计 第五次作业
  • 原文地址:https://www.cnblogs.com/honpey/p/4808897.html
Copyright © 2011-2022 走看看