@@ -780,13 +780,15 @@ static int get_checkpoint_version(struct f2fs_sb_info *sbi, block_t cp_addr,
780780
781781 crc_offset = le32_to_cpu ((* cp_block )-> checksum_offset );
782782 if (crc_offset > (blk_size - sizeof (__le32 ))) {
783+ f2fs_put_page (* cp_page , 1 );
783784 f2fs_msg (sbi -> sb , KERN_WARNING ,
784785 "invalid crc_offset: %zu" , crc_offset );
785786 return - EINVAL ;
786787 }
787788
788789 crc = cur_cp_crc (* cp_block );
789790 if (!f2fs_crc_valid (sbi , crc , * cp_block , crc_offset )) {
791+ f2fs_put_page (* cp_page , 1 );
790792 f2fs_msg (sbi -> sb , KERN_WARNING , "invalid crc value" );
791793 return - EINVAL ;
792794 }
@@ -806,32 +808,31 @@ static struct page *validate_checkpoint(struct f2fs_sb_info *sbi,
806808 err = get_checkpoint_version (sbi , cp_addr , & cp_block ,
807809 & cp_page_1 , version );
808810 if (err )
809- goto invalid_cp1 ;
811+ return NULL ;
810812
811813 if (le32_to_cpu (cp_block -> cp_pack_total_block_count ) >
812814 sbi -> blocks_per_seg ) {
813815 f2fs_msg (sbi -> sb , KERN_WARNING ,
814816 "invalid cp_pack_total_block_count:%u" ,
815817 le32_to_cpu (cp_block -> cp_pack_total_block_count ));
816- goto invalid_cp1 ;
818+ goto invalid_cp ;
817819 }
818820 pre_version = * version ;
819821
820822 cp_addr += le32_to_cpu (cp_block -> cp_pack_total_block_count ) - 1 ;
821823 err = get_checkpoint_version (sbi , cp_addr , & cp_block ,
822824 & cp_page_2 , version );
823825 if (err )
824- goto invalid_cp2 ;
826+ goto invalid_cp ;
825827 cur_version = * version ;
826828
827829 if (cur_version == pre_version ) {
828830 * version = cur_version ;
829831 f2fs_put_page (cp_page_2 , 1 );
830832 return cp_page_1 ;
831833 }
832- invalid_cp2 :
833834 f2fs_put_page (cp_page_2 , 1 );
834- invalid_cp1 :
835+ invalid_cp :
835836 f2fs_put_page (cp_page_1 , 1 );
836837 return NULL ;
837838}
0 commit comments