It missed to call dec_valid_node_count() to release node block count
in error path, fix it.

Fixes: 141170b759e0 ("f2fs: fix to avoid use f2fs_bug_on() in 
f2fs_new_node_page()")
Signed-off-by: Chao Yu <c...@kernel.org>
---
 fs/f2fs/node.c | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c
index b3de6d6cdb02..ae39971825bc 100644
--- a/fs/f2fs/node.c
+++ b/fs/f2fs/node.c
@@ -1313,15 +1313,14 @@ struct page *f2fs_new_node_page(struct dnode_of_data 
*dn, unsigned int ofs)
 
 #ifdef CONFIG_F2FS_CHECK_FS
        err = f2fs_get_node_info(sbi, dn->nid, &new_ni, false);
-       if (err) {
-               dec_valid_node_count(sbi, dn->inode, !ofs);
-               goto fail;
-       }
+       if (err)
+               goto out_dec;
+
        if (unlikely(new_ni.blk_addr != NULL_ADDR)) {
                err = -EFSCORRUPTED;
                set_sbi_flag(sbi, SBI_NEED_FSCK);
                f2fs_handle_error(sbi, ERROR_INVALID_BLKADDR);
-               goto fail;
+               goto out_dec;
        }
 #endif
        new_ni.nid = dn->nid;
@@ -1345,7 +1344,8 @@ struct page *f2fs_new_node_page(struct dnode_of_data *dn, 
unsigned int ofs)
        if (ofs == 0)
                inc_valid_inode_count(sbi);
        return page;
-
+out_dec:
+       dec_valid_node_count(sbi, dn->inode, !ofs);
 fail:
        clear_node_page_dirty(page);
        f2fs_put_page(page, 1);
-- 
2.40.1



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

Reply via email to