f2fs: fix to check available space of CP area correctly in update_ckpt_flags()
authorChao Yu <chao@kernel.org>
Sun, 12 Dec 2021 12:28:12 +0000 (20:28 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 27 Jan 2022 10:05:30 +0000 (11:05 +0100)
commit b702c83e2eaa2fa2d72e957c55c0321535cc8b9f upstream.

Otherwise, nat_bit area may be persisted across boundary of CP area during
nat_bit rebuilding.

Fixes: 94c821fb286b ("f2fs: rebuild nat_bits during umount")
Signed-off-by: Chao Yu <chao@kernel.org>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
fs/f2fs/checkpoint.c

index 7b02827242312d9c350c7db667b6c810e65666d2..99fced979718e3b12fba6252c218c11a6f50f5ea 100644 (file)
@@ -1305,8 +1305,8 @@ static void update_ckpt_flags(struct f2fs_sb_info *sbi, struct cp_control *cpc)
        unsigned long flags;
 
        if (cpc->reason & CP_UMOUNT) {
-               if (le32_to_cpu(ckpt->cp_pack_total_block_count) >
-                       sbi->blocks_per_seg - NM_I(sbi)->nat_bits_blocks) {
+               if (le32_to_cpu(ckpt->cp_pack_total_block_count) +
+                       NM_I(sbi)->nat_bits_blocks > sbi->blocks_per_seg) {
                        clear_ckpt_flags(sbi, CP_NAT_BITS_FLAG);
                        f2fs_notice(sbi, "Disable nat_bits due to no space");
                } else if (!is_set_ckpt_flags(sbi, CP_NAT_BITS_FLAG) &&