Commit 23d38844276680abbf33624f56b6779d43f53633

Authored by Haicheng Li
Committed by Jaegeuk Kim
1 parent 8760952d92

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

... ... @@ -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);