f2fs
文章平均质量分 77
WaterWin
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
f2fs系列文章fsck(二)
fsck_chk_node_blk完成对所有类型的node进行检查。 node类型有:TYPE_INODE,TYPE_DIRECT_NODE,TYPE_INDIRECT_NODE,TYPE_DOUBLE_INDIRECT_NODE,TYPE_XATTR。但是调用这个函数不会是TYPE_XATTR。 文件类型有:F2FS_FT_UNKNOWN、F2FS_FT_REG_FI...原创 2018-11-26 21:33:06 · 1172 阅读 · 0 评论 -
f2fs系列文章fsck(一)
do_fsck首先调用fsck_init对f2fs_fsxk的一些字段进行初始化。 fsck_init首先对f2fs_fsck的nr_main_blks,main_area_bitmap_sz和main_area_bitmap进行一个初始化,nr_main_blks初始化为f2fs文件系统的main area的block的数量,然后是main_area_bitmap_sz初...原创 2018-11-26 21:32:51 · 3045 阅读 · 0 评论 -
f2fs系列文章——sit/nat_version_bitmap
f2fs为了防止宕机对元数据造成不可恢复的损害,所以sit/nat这种元数据有着两个副本,但是这两个副本只有一个是表示最新的数据,f2fs通过保存在cp pack中的sit/nat version bitmap来指示哪个才是最新的。本文将讲述sit和nat两个副本的放置情况,以及sit/nat version bitmap在cp pack中的放置情况,最后将描述sit/nat更新时的ver...原创 2018-11-26 21:36:49 · 2353 阅读 · 2 评论 -
f2fs系列文章fill_super(四)
这篇文章将讲述f2fs的node的管理结构f2fs_nm_info的构建和恢复。 build_node_manager:首先分配f2fs_nm_info的空间,然后调用init_node_manager初始化f2fs_nm_info并分配一些位图的空间。最后调用build_free_nids读取一定page中的f2fs_nat_entry对free_nid进行初始化,然后根...原创 2018-11-26 21:36:06 · 712 阅读 · 0 评论 -
f2fs系列文章fill_super(三)
这篇文章完成f2fs的segment管理结构f2fs_sm_info的创建和恢复。 build_segment_manager:首先分配容纳f2fs_sm_info的空间,然后用f2fs_super_block中的数据对f2fs_sm_info的一些关于segment数量的信息进行初始化。接着初始化其中的三个链表discard_list、wait_list、sit_ent...原创 2018-11-26 21:35:57 · 1231 阅读 · 0 评论 -
f2fs系列文章——缓存summary写入磁盘的问题
这篇文章讲述一下f2fs文件系统中缓存在内存中的f2fs_summary写入磁盘的问题,这个涉及到f2fs_summary写入磁盘的时机、位置以及curseg在do_checkpoint中的写入问题和mount的时候的恢复curseg的问题。 首先,对于curseg_info中的f2fs_summary_block有两种方式同步到page cache中。一种是在curseg_in...原创 2018-11-26 21:37:00 · 1474 阅读 · 0 评论 -
f2fs系列文章fill_super(二)
sb_set_blocksize通过函数set_blocksize对size进行检查并设置块设备的块大小。然后将super block的s_blocksize,s_blocksize_bits设置F2FS_BLKSIZE和F2FS_BLKSIZE相应的bit位数。int sb_set_blocksize(struct super_block *sb, int size){ if ...原创 2018-11-26 21:35:47 · 1540 阅读 · 0 评论 -
f2fs系列文章fill_super(一)
这个系列文章将讲述文件系统的安装过程,以函数f2fs_fill_super为起点。 f2fs_fill_super:通过调用sb_set_blocksize来检查和设置super_block的块大小字段和快设备的块大小。然后调用read_raw_super_block来对物理设备上的f2fs_super_block进行读取。接下来就可以对f2fs_sb_info的某些字段进行初始...原创 2018-11-26 21:35:30 · 2148 阅读 · 1 评论 -
f2fs系列文章gc
这篇文章将讲述f2fs的gc,其主要的步骤应该是分为两步,首先select一个合适的section,然后将section中的数据全部迁移。 f2fs_gc:这个函数主要有两个函数调用gc线程和f2fs_balance_fs。首先检查super_block是否设置MS_ACTIVE,也就是super_block处于活动状态(目前不知道什么个状态),如果设置了就不做gc了。然后...原创 2018-11-26 21:32:30 · 2764 阅读 · 2 评论 -
f2fs系列文章truncate
这篇文章讲f2fs文件系统的截断,在调用这个函数之前会设置inode的i_size,这个函数完成在文件中i_size之后的数据的删除。其起始的函数是f2fs_truncate。 f2fs_truncate:检查inode的mode,如果不是REG或者是目录或者是LNK,那么直接返回。然后再调用f2fs_may_inline_data检查文件是否可以以内联的形式存放,如果不行,调用...原创 2018-11-26 21:37:17 · 1334 阅读 · 0 评论 -
f2fs系列文章——do_checkpoint关于data summary的两种写入方式
为了保存current segment的summary信息,f2fs在do_checkpoint的时候会调用会调用write_data_summaries和write_node_summaries将其sumamries信息写到page cache中然后随后同步到磁盘中,其中write_node_summaries也是只有在umount和fastboot的情况下才会调用。我们可以看到writ...原创 2018-11-26 21:36:38 · 1275 阅读 · 0 评论 -
f2fs系列文章fsck(五)
fsck_verify通过前面的检查结果来修正元数据。 首先是对nid的检查情况进行查看,f2fs_fsck中的nat_area_bitmap从开始的读取f2fs_nat_block中的所有的f2fs_nat_entry来记录所有有效的nid,但是在遍历的过程中在调用sanity_check_nid的时候已经将所有正常的nid都给clear掉了,所以在检查这个位图的时候,如果发现...原创 2018-11-26 21:33:43 · 1959 阅读 · 0 评论 -
f2fs系列文章fsck(四)
补充一下之前略过的关于direct node、indirect node、dindirect node的检查。 fsck_chk_didnode_blk,对NIDS_PER_BLOCK个nid进行遍历,如果nid ==0,就直接跳过,nid!=0的话,就调用以TYPE_INDIRECT_NODE的标志调用fsck_chk_node_blk。如果成功就直接将i_block++。否则...原创 2018-11-26 21:33:34 · 715 阅读 · 0 评论 -
f2fs系列文章fsck(三)
fsck_chk_inode_blk接下来就是对一个文件进行处理了,内容比较丰富。首先对inode对应的地址在f2fs_fsck的main_area_bitmap中有没有置位,如果没有置位,也就是检查到了一个新的inode,将f2fs_fsck中的check_result的valid_inode_cnt++,这里需要检查的原因是,可能有硬链接这些在之前就已经将main_area_bitma...原创 2018-11-26 21:33:20 · 1312 阅读 · 0 评论 -
f2fs系列文章——cp pack的组成
f2fs将分区分为super block、cp pack、sit、nat、ssa、main area四个区域,除了cp pack外,其他的区域的组成都比较简单,基本只有一种数据结构,只有cp pack由于承载了check point的功能,所以其组成比较复杂,这篇文章就cp pack的组成来详细讲述。 cp pack是由f2fs_checkpoint、sit_version_bi...原创 2018-11-26 21:36:25 · 1603 阅读 · 0 评论
分享