@@ -1883,12 +1883,17 @@ int sanity_check_ckpt(struct f2fs_sb_info *sbi)
1883
1883
struct f2fs_checkpoint * ckpt = F2FS_CKPT (sbi );
1884
1884
unsigned int ovp_segments , reserved_segments ;
1885
1885
unsigned int main_segs , blocks_per_seg ;
1886
+ unsigned int sit_segs , nat_segs ;
1887
+ unsigned int sit_bitmap_size , nat_bitmap_size ;
1888
+ unsigned int log_blocks_per_seg ;
1886
1889
int i ;
1887
1890
1888
1891
total = le32_to_cpu (raw_super -> segment_count );
1889
1892
fsmeta = le32_to_cpu (raw_super -> segment_count_ckpt );
1890
- fsmeta += le32_to_cpu (raw_super -> segment_count_sit );
1891
- fsmeta += le32_to_cpu (raw_super -> segment_count_nat );
1893
+ sit_segs = le32_to_cpu (raw_super -> segment_count_sit );
1894
+ fsmeta += sit_segs ;
1895
+ nat_segs = le32_to_cpu (raw_super -> segment_count_nat );
1896
+ fsmeta += nat_segs ;
1892
1897
fsmeta += le32_to_cpu (ckpt -> rsvd_segment_count );
1893
1898
fsmeta += le32_to_cpu (raw_super -> segment_count_ssa );
1894
1899
@@ -1919,6 +1924,18 @@ int sanity_check_ckpt(struct f2fs_sb_info *sbi)
1919
1924
return 1 ;
1920
1925
}
1921
1926
1927
+ sit_bitmap_size = le32_to_cpu (ckpt -> sit_ver_bitmap_bytesize );
1928
+ nat_bitmap_size = le32_to_cpu (ckpt -> nat_ver_bitmap_bytesize );
1929
+ log_blocks_per_seg = le32_to_cpu (raw_super -> log_blocks_per_seg );
1930
+
1931
+ if (sit_bitmap_size != ((sit_segs / 2 ) << log_blocks_per_seg ) / 8 ||
1932
+ nat_bitmap_size != ((nat_segs / 2 ) << log_blocks_per_seg ) / 8 ) {
1933
+ f2fs_msg (sbi -> sb , KERN_ERR ,
1934
+ "Wrong bitmap size: sit: %u, nat:%u" ,
1935
+ sit_bitmap_size , nat_bitmap_size );
1936
+ return 1 ;
1937
+ }
1938
+
1922
1939
if (unlikely (f2fs_cp_error (sbi ))) {
1923
1940
f2fs_msg (sbi -> sb , KERN_ERR , "A bug case: need to run fsck" );
1924
1941
return 1 ;
0 commit comments