blkcnt_t sectors = count << F2FS_LOG_SECTORS_PER_BLOCK;
 
        spin_lock(&sbi->stat_lock);
-       f2fs_bug_on(sbi, sbi->total_valid_block_count < (block_t) count);
-       sbi->total_valid_block_count -= (block_t)count;
+       if (unlikely(sbi->total_valid_block_count < count)) {
+               f2fs_warn(sbi, "Inconsistent total_valid_block_count:%u, ino:%lu, count:%u",
+                         sbi->total_valid_block_count, inode->i_ino, count);
+               sbi->total_valid_block_count = 0;
+               set_sbi_flag(sbi, SBI_NEED_FSCK);
+       } else {
+               sbi->total_valid_block_count -= count;
+       }
        if (sbi->reserved_blocks &&
                sbi->current_reserved_blocks < sbi->reserved_blocks)
                sbi->current_reserved_blocks = min(sbi->reserved_blocks,