f2fs系列文章fsck(四)

本文详细介绍了在f2fs文件系统中,fsck如何针对direct node、indirect node、dindirect node进行检查。fsck_chk_didnode_blk、fsck_chk_idnode_blk和fsck_chk_data_blk等函数逐个遍历节点,对无效或损坏的节点进行修复,确保数据的完整性。在遍历过程中,遇到问题的节点会被标记并进行修正,然后将修复后的节点写回。
摘要由CSDN通过智能技术生成

    补充一下之前略过的关于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++。否则将该位置的nid置为0。最后如果进行过修复,则将修复过的node写回。

int fsck_chk_didnode_blk(struct f2fs_sb_info *sbi, struct f2fs_inode *inode,
		enum FILE_TYPE ftype, struct f2fs_node *node_blk, u32 *blk_cnt, struct child_info *child)
{
	int i = 0;
	int need_fix = 0, ret = 0;
	for (i = 0; i < NIDS_PER_BLOCK; i++) {
		if (le32_to_cpu(node_blk->in.nid[i]) == 0x0)
			goto skip;
		ret = fsck_chk_node_blk(sbi, inode, le32_to_cpu(node_blk->in.nid[i]),ftype,
					TYPE_INDIRECT_NODE, blk_cnt, child);
		if (!ret)
			*blk_cnt = *blk_cnt + 1;
		else if (ret == -EINVAL) {
			if (!c.fix_on)
				printf("should delete in.nid[i] = 0;\n");
			
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值