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初始化为记录nr_main_blks个block的位图所需的字节大小。最后是分配nr_main_blks个字节大小的空间给main_area_bitmap,并将其置位全部都是0,这个有效位图在后面检查的时候,每次检查到一个块地址时,将其置位为1,但是,如果检查到一个块地址的时候发现已经只为了,说明这个块地址被重复使用。所以,在结束的时候,这个位图会记录所有被用到的块。这个位图正常情况下应该是跟f2fs_sit_map中的位图合并起来是一致的。然后build_nat_area_bitmap对f2fs_fsck的nr_nat_entries、nat_area_bitmap_sz和 nat_area_bitmap以及entries进行初始化。最后build_sit_area_bitmap对f2fs_fsck中的sit_area_bitmap_sz、sit_area_bitmap和check_result中的 sit_valid_blocks、sit_free_segs的初始化。

void fsck_init(struct f2fs_sb_info *sbi)
{
	struct f2fs_fsck *fsck = F2FS_FSCK(sbi);
	struct f2fs_sm_info *sm_i = SM_I(sbi);

	fsck->nr_main_blks = sm_i->main_segments << sbi->log_blocks_per_seg;
	fsck->main_area_bitmap_sz = (fsck->nr_main_blks + 7) / 8;
	fsck->main_area_bitmap = calloc(fsck->main_area_bitmap_sz, 1);
	ASSERT(fsck->main_area_bitmap != NULL);

	build_nat_area_bitmap(sbi);

	build_sit_area_bitmap(sbi);

	ASSERT(tree_mark_size != 0);
	tree_mark = calloc(tree_mark_size, 1);
	ASSERT(tree_mark != NULL);
}

    build_nat_area_bitmap首先对f2fs_fsck的nr_nat_entries、nat_area_bitmap_sz和 nat_area_bitmap进行初始化,nr_nat_entries初始化为f2fs文件系统的f2fs_nat_entry的数量,然后是nat_area_bitmap_sz初始化为记录nr_

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值