@@ -2280,12 +2280,17 @@ int f2fs_sanity_check_ckpt(struct f2fs_sb_info *sbi)
2280
2280
struct f2fs_checkpoint * ckpt = F2FS_CKPT (sbi );
2281
2281
unsigned int ovp_segments , reserved_segments ;
2282
2282
unsigned int main_segs , blocks_per_seg ;
2283
+ unsigned int sit_segs , nat_segs ;
2284
+ unsigned int sit_bitmap_size , nat_bitmap_size ;
2285
+ unsigned int log_blocks_per_seg ;
2283
2286
int i ;
2284
2287
2285
2288
total = le32_to_cpu (raw_super -> segment_count );
2286
2289
fsmeta = le32_to_cpu (raw_super -> segment_count_ckpt );
2287
- fsmeta += le32_to_cpu (raw_super -> segment_count_sit );
2288
- fsmeta += le32_to_cpu (raw_super -> segment_count_nat );
2290
+ sit_segs = le32_to_cpu (raw_super -> segment_count_sit );
2291
+ fsmeta += sit_segs ;
2292
+ nat_segs = le32_to_cpu (raw_super -> segment_count_nat );
2293
+ fsmeta += nat_segs ;
2289
2294
fsmeta += le32_to_cpu (ckpt -> rsvd_segment_count );
2290
2295
fsmeta += le32_to_cpu (raw_super -> segment_count_ssa );
2291
2296
@@ -2316,6 +2321,18 @@ int f2fs_sanity_check_ckpt(struct f2fs_sb_info *sbi)
2316
2321
return 1 ;
2317
2322
}
2318
2323
2324
+ sit_bitmap_size = le32_to_cpu (ckpt -> sit_ver_bitmap_bytesize );
2325
+ nat_bitmap_size = le32_to_cpu (ckpt -> nat_ver_bitmap_bytesize );
2326
+ log_blocks_per_seg = le32_to_cpu (raw_super -> log_blocks_per_seg );
2327
+
2328
+ if (sit_bitmap_size != ((sit_segs / 2 ) << log_blocks_per_seg ) / 8 ||
2329
+ nat_bitmap_size != ((nat_segs / 2 ) << log_blocks_per_seg ) / 8 ) {
2330
+ f2fs_msg (sbi -> sb , KERN_ERR ,
2331
+ "Wrong bitmap size: sit: %u, nat:%u" ,
2332
+ sit_bitmap_size , nat_bitmap_size );
2333
+ return 1 ;
2334
+ }
2335
+
2319
2336
if (unlikely (f2fs_cp_error (sbi ))) {
2320
2337
f2fs_msg (sbi -> sb , KERN_ERR , "A bug case: need to run fsck" );
2321
2338
return 1 ;
0 commit comments