|
@@ -2283,6 +2283,8 @@ int f2fs_sanity_check_ckpt(struct f2fs_sb_info *sbi)
|
|
|
unsigned int sit_segs, nat_segs;
|
|
|
unsigned int sit_bitmap_size, nat_bitmap_size;
|
|
|
unsigned int log_blocks_per_seg;
|
|
|
+ unsigned int segment_count_main;
|
|
|
+ block_t user_block_count;
|
|
|
int i;
|
|
|
|
|
|
total = le32_to_cpu(raw_super->segment_count);
|
|
@@ -2307,6 +2309,16 @@ int f2fs_sanity_check_ckpt(struct f2fs_sb_info *sbi)
|
|
|
return 1;
|
|
|
}
|
|
|
|
|
|
+ user_block_count = le64_to_cpu(ckpt->user_block_count);
|
|
|
+ segment_count_main = le32_to_cpu(raw_super->segment_count_main);
|
|
|
+ log_blocks_per_seg = le32_to_cpu(raw_super->log_blocks_per_seg);
|
|
|
+ if (!user_block_count || user_block_count >=
|
|
|
+ segment_count_main << log_blocks_per_seg) {
|
|
|
+ f2fs_msg(sbi->sb, KERN_ERR,
|
|
|
+ "Wrong user_block_count: %u", user_block_count);
|
|
|
+ return 1;
|
|
|
+ }
|
|
|
+
|
|
|
main_segs = le32_to_cpu(raw_super->segment_count_main);
|
|
|
blocks_per_seg = sbi->blocks_per_seg;
|
|
|
|
|
@@ -2323,7 +2335,6 @@ int f2fs_sanity_check_ckpt(struct f2fs_sb_info *sbi)
|
|
|
|
|
|
sit_bitmap_size = le32_to_cpu(ckpt->sit_ver_bitmap_bytesize);
|
|
|
nat_bitmap_size = le32_to_cpu(ckpt->nat_ver_bitmap_bytesize);
|
|
|
- log_blocks_per_seg = le32_to_cpu(raw_super->log_blocks_per_seg);
|
|
|
|
|
|
if (sit_bitmap_size != ((sit_segs / 2) << log_blocks_per_seg) / 8 ||
|
|
|
nat_bitmap_size != ((nat_segs / 2) << log_blocks_per_seg) / 8) {
|