Commit 23d38844276680abbf33624f56b6779d43f53633
Committed by
Jaegeuk Kim
1 parent
8760952d92
Exists in
smarc-l5.0.0_1.0.0-ga
and in
5 other branches
f2fs: optimize scan_nat_page()
When nm_i->fcnt > 2 * MAX_FREE_NIDS, stop scanning other NAT entries. Signed-off-by: Haicheng Li <haicheng.li@linux.intel.com> [Jaegeuk Kim: fix handling the return value of add_free_nid()] Signed-off-by: Jaegeuk Kim <jaegeuk.kim@samsung.com>
Showing 1 changed file with 9 additions and 5 deletions Side-by-side Diff
fs/f2fs/node.c
... | ... | @@ -1254,7 +1254,7 @@ |
1254 | 1254 | struct free_nid *i; |
1255 | 1255 | |
1256 | 1256 | if (nm_i->fcnt > 2 * MAX_FREE_NIDS) |
1257 | - return 0; | |
1257 | + return -1; | |
1258 | 1258 | |
1259 | 1259 | /* 0 nid should not be used */ |
1260 | 1260 | if (nid == 0) |
1261 | 1261 | |
1262 | 1262 | |
... | ... | @@ -1302,12 +1302,16 @@ |
1302 | 1302 | i = start_nid % NAT_ENTRY_PER_BLOCK; |
1303 | 1303 | |
1304 | 1304 | for (; i < NAT_ENTRY_PER_BLOCK; i++, start_nid++) { |
1305 | + | |
1305 | 1306 | if (start_nid >= nm_i->max_nid) |
1306 | 1307 | break; |
1307 | - blk_addr = le32_to_cpu(nat_blk->entries[i].block_addr); | |
1308 | + | |
1309 | + blk_addr = le32_to_cpu(nat_blk->entries[i].block_addr); | |
1308 | 1310 | BUG_ON(blk_addr == NEW_ADDR); |
1309 | - if (blk_addr == NULL_ADDR) | |
1310 | - add_free_nid(nm_i, start_nid); | |
1311 | + if (blk_addr == NULL_ADDR) { | |
1312 | + if (add_free_nid(nm_i, start_nid) < 0) | |
1313 | + break; | |
1314 | + } | |
1311 | 1315 | } |
1312 | 1316 | } |
1313 | 1317 | |
... | ... | @@ -1655,7 +1659,7 @@ |
1655 | 1659 | } |
1656 | 1660 | |
1657 | 1661 | if (nat_get_blkaddr(ne) == NULL_ADDR && |
1658 | - !add_free_nid(NM_I(sbi), nid)) { | |
1662 | + add_free_nid(NM_I(sbi), nid) <= 0) { | |
1659 | 1663 | write_lock(&nm_i->nat_tree_lock); |
1660 | 1664 | __del_from_nat_cache(nm_i, ne); |
1661 | 1665 | write_unlock(&nm_i->nat_tree_lock); |