@@ -780,13 +780,15 @@ static int get_checkpoint_version(struct f2fs_sb_info *sbi, block_t cp_addr,
780
780
781
781
crc_offset = le32_to_cpu ((* cp_block )-> checksum_offset );
782
782
if (crc_offset > (blk_size - sizeof (__le32 ))) {
783
+ f2fs_put_page (* cp_page , 1 );
783
784
f2fs_msg (sbi -> sb , KERN_WARNING ,
784
785
"invalid crc_offset: %zu" , crc_offset );
785
786
return - EINVAL ;
786
787
}
787
788
788
789
crc = cur_cp_crc (* cp_block );
789
790
if (!f2fs_crc_valid (sbi , crc , * cp_block , crc_offset )) {
791
+ f2fs_put_page (* cp_page , 1 );
790
792
f2fs_msg (sbi -> sb , KERN_WARNING , "invalid crc value" );
791
793
return - EINVAL ;
792
794
}
@@ -806,32 +808,31 @@ static struct page *validate_checkpoint(struct f2fs_sb_info *sbi,
806
808
err = get_checkpoint_version (sbi , cp_addr , & cp_block ,
807
809
& cp_page_1 , version );
808
810
if (err )
809
- goto invalid_cp1 ;
811
+ return NULL ;
810
812
811
813
if (le32_to_cpu (cp_block -> cp_pack_total_block_count ) >
812
814
sbi -> blocks_per_seg ) {
813
815
f2fs_msg (sbi -> sb , KERN_WARNING ,
814
816
"invalid cp_pack_total_block_count:%u" ,
815
817
le32_to_cpu (cp_block -> cp_pack_total_block_count ));
816
- goto invalid_cp1 ;
818
+ goto invalid_cp ;
817
819
}
818
820
pre_version = * version ;
819
821
820
822
cp_addr += le32_to_cpu (cp_block -> cp_pack_total_block_count ) - 1 ;
821
823
err = get_checkpoint_version (sbi , cp_addr , & cp_block ,
822
824
& cp_page_2 , version );
823
825
if (err )
824
- goto invalid_cp2 ;
826
+ goto invalid_cp ;
825
827
cur_version = * version ;
826
828
827
829
if (cur_version == pre_version ) {
828
830
* version = cur_version ;
829
831
f2fs_put_page (cp_page_2 , 1 );
830
832
return cp_page_1 ;
831
833
}
832
- invalid_cp2 :
833
834
f2fs_put_page (cp_page_2 , 1 );
834
- invalid_cp1 :
835
+ invalid_cp :
835
836
f2fs_put_page (cp_page_1 , 1 );
836
837
return NULL ;
837
838
}
0 commit comments