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

f2fs源码解析(五) node管理结构梳理

时间:2015-11-07 21:58:22      阅读:269      评论:0      收藏:0      [点我收藏+]

标签:

 node是f2fs重要的管理结构, 它非常重要! 系统挂载完毕后, 会有一个f2fs_nm_info结构的node管理器来管理node的分配. f2fs_nm_info中最让人疑惑的是几颗基数树:

 490 struct f2fs_nm_info {
 491     block_t nat_blkaddr;        /* base disk address of NAT */
 492     nid_t max_nid;          /* maximum possible node ids */
 494     nid_t next_scan_nid;        /* the next nid to be scanned */
 497     /* NAT cache management */
 498     struct radix_tree_root nat_root;/* root of the nat entry cache */
 499     struct radix_tree_root nat_set_root;/* root of the nat set cache */
 501     struct list_head nat_entries;   /* cached nat entry list (clean) */
 502     unsigned int nat_cnt;       /* the # of cached nat entries */
 503     unsigned int dirty_nat_cnt; /* total num of nat entries in set */
 505     /* free node ids management */
 506     struct radix_tree_root free_nid_root;/* root of the free_nid cache */
 507     struct list_head free_nid_list; /* a list for free nids */
 509     unsigned int fcnt;      /* the number of free node id */
 512     /* for checkpoint */
 513     char *nat_bitmap;       /* NAT bitmap pointer */
 514     int bitmap_size;        /* bitmap size */
 515 };

三棵基数树分别是: nat_root, nat_set_root, free_nid_root;

首先, 对于整个node管理器来说, 一个核心的结构体是node_info:

 46 struct node_info {
 47     nid_t nid;      /* node id */
 48     nid_t ino;      /* inode number of the node‘s owner */
 49     block_t blk_addr;   /* block address of the node */
 50     unsigned char version;  /* version of the node */
 51     unsigned char flag; /* for node information bits */
 52 };   
 53 
 54 struct nat_entry {
 55     struct list_head list;  /* for clean or dirty nat list */
 56     struct node_info ni;    /* in-memory node information */
 57 };

发现node_info和f2fs_nat_entry【磁盘上的存储】长得太像了, 甚至比 struct f2fs_nat_entry 还要多出来一个flag 位来表示这个节点的一些属性!

266 struct f2fs_nat_entry {
267
__u8 version; /* latest version of cached nat entry */ 268 __le32 ino; /* inode number */ 269 __le32 block_addr; /* block address */ 270 } __packed;

这个core数据结构被两个结构控制:一个是基数树【负责索引】,一个是链表。

f2fs源码解析(五) node管理结构梳理

标签:

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

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