@@ -708,13 +708,15 @@ static int get_checkpoint_version(struct f2fs_sb_info *sbi, block_t cp_addr,
708708
709709 crc_offset = le32_to_cpu ((* cp_block )-> checksum_offset );
710710 if (crc_offset > (blk_size - sizeof (__le32 ))) {
711+ f2fs_put_page (* cp_page , 1 );
711712 f2fs_msg (sbi -> sb , KERN_WARNING ,
712713 "invalid crc_offset: %zu" , crc_offset );
713714 return - EINVAL ;
714715 }
715716
716717 crc = cur_cp_crc (* cp_block );
717718 if (!f2fs_crc_valid (sbi , crc , * cp_block , crc_offset )) {
719+ f2fs_put_page (* cp_page , 1 );
718720 f2fs_msg (sbi -> sb , KERN_WARNING , "invalid crc value" );
719721 return - EINVAL ;
720722 }
@@ -734,24 +736,23 @@ static struct page *validate_checkpoint(struct f2fs_sb_info *sbi,
734736 err = get_checkpoint_version (sbi , cp_addr , & cp_block ,
735737 & cp_page_1 , version );
736738 if (err )
737- goto invalid_cp1 ;
739+ return NULL ;
738740 pre_version = * version ;
739741
740742 cp_addr += le32_to_cpu (cp_block -> cp_pack_total_block_count ) - 1 ;
741743 err = get_checkpoint_version (sbi , cp_addr , & cp_block ,
742744 & cp_page_2 , version );
743745 if (err )
744- goto invalid_cp2 ;
746+ goto invalid_cp ;
745747 cur_version = * version ;
746748
747749 if (cur_version == pre_version ) {
748750 * version = cur_version ;
749751 f2fs_put_page (cp_page_2 , 1 );
750752 return cp_page_1 ;
751753 }
752- invalid_cp2 :
753754 f2fs_put_page (cp_page_2 , 1 );
754- invalid_cp1 :
755+ invalid_cp :
755756 f2fs_put_page (cp_page_1 , 1 );
756757 return NULL ;
757758}
0 commit comments