struct page *cp_page_1 = NULL, *cp_page_2 = NULL;
        struct f2fs_checkpoint *cp_block = NULL;
        unsigned long long cur_version = 0, pre_version = 0;
+       unsigned int cp_blocks;
        int err;
 
        err = get_checkpoint_version(sbi, cp_addr, &cp_block,
        if (err)
                return NULL;
 
-       if (le32_to_cpu(cp_block->cp_pack_total_block_count) >
-                                       sbi->blocks_per_seg) {
+       cp_blocks = le32_to_cpu(cp_block->cp_pack_total_block_count);
+
+       if (cp_blocks > sbi->blocks_per_seg || cp_blocks <= F2FS_CP_PACKS) {
                f2fs_warn(sbi, "invalid cp_pack_total_block_count:%u",
                          le32_to_cpu(cp_block->cp_pack_total_block_count));
                goto invalid_cp;
        }
        pre_version = *version;
 
-       cp_addr += le32_to_cpu(cp_block->cp_pack_total_block_count) - 1;
+       cp_addr += cp_blocks - 1;
        err = get_checkpoint_version(sbi, cp_addr, &cp_block,
                                        &cp_page_2, version);
        if (err)