During block allocation in large free section, we need to change
all sub segments' type in it, otherwise, we will fail to allocate
block in non-first segment due to mismatch seg-type.
Signed-off-by: Chao Yu <yuchao0@huawei.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
return 0;
}
+void set_section_type(struct f2fs_sb_info *sbi, unsigned int segno, int type)
+{
+ struct seg_entry *se;
+ unsigned int i;
+
+ if (sbi->segs_per_sec == 1)
+ return;
+
+ for (i = 0; i < sbi->segs_per_sec; i++) {
+ se = get_seg_entry(sbi, segno + i);
+ se->type = type;
+ }
+}
+
int find_next_free_block(struct f2fs_sb_info *sbi, u64 *to, int left, int type)
{
struct f2fs_super_block *sb = F2FS_RAW_SUPER(sbi);
if (se2->valid_blocks)
break;
}
- if (i == sbi->segs_per_sec)
+
+ if (i == sbi->segs_per_sec) {
+ set_section_type(sbi, segno, type);
return 0;
+ }
}
if (se->type == type &&