In current version, after scan_free_nid_bits, the scan is over if 
nid_cnt[FREE_NID] != 0.
In most cases, there are still free nids in the free list during the scan, and 
scan_free_nid_bits
usually can't increase nid_cnt[FREE_NID].
It causes that __build_free_nids is called many times without solving the 
shortage
of the free nids. This patch fixes that.

Signed-off-by: Fan li <fanofcode...@samsung.com>
---
 fs/f2fs/node.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c
index 3d0d1be..5cef118 100644
--- a/fs/f2fs/node.c
+++ b/fs/f2fs/node.c
@@ -2010,7 +2010,7 @@ static void __build_free_nids(struct f2fs_sb_info *sbi, 
bool sync, bool mount)
                /* try to find free nids in free_nid_bitmap */
                scan_free_nid_bits(sbi);

-               if (nm_i->nid_cnt[FREE_NID])
+               if (nm_i->nid_cnt[FREE_NID] >= NAT_ENTRY_PER_BLOCK)
                        return;
        }

--
2.7.4

Reply via email to