summaryrefslogtreecommitdiffstats
path: root/fs/f2fs/node.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/f2fs/node.c')
-rw-r--r--fs/f2fs/node.c27
1 files changed, 11 insertions, 16 deletions
diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c
index ef80f791b02b..4fa3fd5def34 100644
--- a/fs/f2fs/node.c
+++ b/fs/f2fs/node.c
@@ -1296,23 +1296,18 @@ static int add_free_nid(struct f2fs_nm_info *nm_i, nid_t nid, bool build)
1296 if (nid == 0) 1296 if (nid == 0)
1297 return 0; 1297 return 0;
1298 1298
1299 if (!build) 1299 if (build) {
1300 goto retry; 1300 /* do not add allocated nids */
1301 1301 read_lock(&nm_i->nat_tree_lock);
1302 /* do not add allocated nids */ 1302 ne = __lookup_nat_cache(nm_i, nid);
1303 read_lock(&nm_i->nat_tree_lock); 1303 if (ne && nat_get_blkaddr(ne) != NULL_ADDR)
1304 ne = __lookup_nat_cache(nm_i, nid); 1304 allocated = true;
1305 if (ne && nat_get_blkaddr(ne) != NULL_ADDR) 1305 read_unlock(&nm_i->nat_tree_lock);
1306 allocated = true; 1306 if (allocated)
1307 read_unlock(&nm_i->nat_tree_lock); 1307 return 0;
1308 if (allocated)
1309 return 0;
1310retry:
1311 i = kmem_cache_alloc(free_nid_slab, GFP_NOFS);
1312 if (!i) {
1313 cond_resched();
1314 goto retry;
1315 } 1308 }
1309
1310 i = f2fs_kmem_cache_alloc(free_nid_slab, GFP_NOFS);
1316 i->nid = nid; 1311 i->nid = nid;
1317 i->state = NID_NEW; 1312 i->state = NID_NEW;
1318 1313