return !has_not_enough_free_secs(sbi, freed, needed);
 }
 
+static inline bool has_enough_free_blks(struct f2fs_sb_info *sbi)
+{
+       unsigned int total_free_blocks = 0;
+       unsigned int avail_user_block_count;
+
+       spin_lock(&sbi->stat_lock);
+
+       avail_user_block_count = get_available_block_count(sbi, NULL, true);
+       total_free_blocks = avail_user_block_count - (unsigned int)valid_user_blocks(sbi);
+
+       spin_unlock(&sbi->stat_lock);
+
+       return total_free_blocks > 0;
+}
+
 static inline bool f2fs_is_checkpoint_ready(struct f2fs_sb_info *sbi)
 {
        if (likely(!is_sbi_flag_set(sbi, SBI_CP_DISABLED)))
                return true;
        if (likely(has_enough_free_secs(sbi, 0, 0)))
                return true;
+       if (!f2fs_lfs_mode(sbi) &&
+               likely(has_enough_free_blks(sbi)))
+               return true;
        return false;
 }