Lines Matching refs:nm_i

24 #define on_f2fs_build_free_nids(nm_i) mutex_is_locked(&(nm_i)->build_lock)  argument
53 struct f2fs_nm_info *nm_i = NM_I(sbi); in f2fs_available_free_memory() local
60 if (!nm_i) in f2fs_available_free_memory()
72 mem_size = (nm_i->nid_cnt[FREE_NID] * in f2fs_available_free_memory()
74 res = mem_size < ((avail_ram * nm_i->ram_thresh / 100) >> 2); in f2fs_available_free_memory()
80 mem_size = (data_race(READ_ONCE(nm_i->nat_cnt[TOTAL_NAT])) * in f2fs_available_free_memory()
82 res = mem_size < ((avail_ram * nm_i->ram_thresh / 100) >> 2); in f2fs_available_free_memory()
89 res = mem_size < ((avail_ram * nm_i->ram_thresh / 100) >> 1); in f2fs_available_free_memory()
97 res = mem_size < ((avail_ram * nm_i->ram_thresh / 100) >> 1); in f2fs_available_free_memory()
107 res = mem_size < ((avail_ram * nm_i->ram_thresh / 100) >> 2); in f2fs_available_free_memory()
111 res = mem_size < (avail_ram * nm_i->ram_thresh / 100); in f2fs_available_free_memory()
155 struct f2fs_nm_info *nm_i = NM_I(sbi); in get_next_nat_folio() local
172 set_to_next_nat(nm_i, nid); in get_next_nat_folio()
197 static struct nat_entry *__init_nat_entry(struct f2fs_nm_info *nm_i, in __init_nat_entry() argument
201 f2fs_radix_tree_insert(&nm_i->nat_root, nat_get_nid(ne), ne); in __init_nat_entry()
202 else if (radix_tree_insert(&nm_i->nat_root, nat_get_nid(ne), ne)) in __init_nat_entry()
210 nm_i->nat_cnt[TOTAL_NAT]++; in __init_nat_entry()
214 spin_lock(&nm_i->nat_list_lock); in __init_nat_entry()
215 list_add_tail(&ne->list, &nm_i->nat_entries); in __init_nat_entry()
216 spin_unlock(&nm_i->nat_list_lock); in __init_nat_entry()
218 nm_i->nat_cnt[TOTAL_NAT]++; in __init_nat_entry()
219 nm_i->nat_cnt[RECLAIMABLE_NAT]++; in __init_nat_entry()
223 static struct nat_entry *__lookup_nat_cache(struct f2fs_nm_info *nm_i, nid_t n, bool for_dirty) in __lookup_nat_cache() argument
227 ne = radix_tree_lookup(&nm_i->nat_root, n); in __lookup_nat_cache()
234 spin_lock(&nm_i->nat_list_lock); in __lookup_nat_cache()
236 list_move_tail(&ne->list, &nm_i->nat_entries); in __lookup_nat_cache()
237 spin_unlock(&nm_i->nat_list_lock); in __lookup_nat_cache()
243 static unsigned int __gang_lookup_nat_cache(struct f2fs_nm_info *nm_i, in __gang_lookup_nat_cache() argument
246 return radix_tree_gang_lookup(&nm_i->nat_root, (void **)ep, start, nr); in __gang_lookup_nat_cache()
249 static void __del_from_nat_cache(struct f2fs_nm_info *nm_i, struct nat_entry *e) in __del_from_nat_cache() argument
251 radix_tree_delete(&nm_i->nat_root, nat_get_nid(e)); in __del_from_nat_cache()
252 nm_i->nat_cnt[TOTAL_NAT]--; in __del_from_nat_cache()
253 nm_i->nat_cnt[RECLAIMABLE_NAT]--; in __del_from_nat_cache()
257 static struct nat_entry_set *__grab_nat_entry_set(struct f2fs_nm_info *nm_i, in __grab_nat_entry_set() argument
263 head = radix_tree_lookup(&nm_i->nat_set_root, set); in __grab_nat_entry_set()
272 f2fs_radix_tree_insert(&nm_i->nat_set_root, set, head); in __grab_nat_entry_set()
277 static void __set_nat_cache_dirty(struct f2fs_nm_info *nm_i, in __set_nat_cache_dirty() argument
284 head = __grab_nat_entry_set(nm_i, ne); in __set_nat_cache_dirty()
300 nm_i->nat_cnt[DIRTY_NAT]++; in __set_nat_cache_dirty()
302 nm_i->nat_cnt[RECLAIMABLE_NAT]--; in __set_nat_cache_dirty()
305 spin_lock(&nm_i->nat_list_lock); in __set_nat_cache_dirty()
310 spin_unlock(&nm_i->nat_list_lock); in __set_nat_cache_dirty()
313 static void __clear_nat_cache_dirty(struct f2fs_nm_info *nm_i, in __clear_nat_cache_dirty() argument
316 spin_lock(&nm_i->nat_list_lock); in __clear_nat_cache_dirty()
317 list_move_tail(&ne->list, &nm_i->nat_entries); in __clear_nat_cache_dirty()
318 spin_unlock(&nm_i->nat_list_lock); in __clear_nat_cache_dirty()
322 nm_i->nat_cnt[DIRTY_NAT]--; in __clear_nat_cache_dirty()
323 nm_i->nat_cnt[RECLAIMABLE_NAT]++; in __clear_nat_cache_dirty()
326 static unsigned int __gang_lookup_nat_set(struct f2fs_nm_info *nm_i, in __gang_lookup_nat_set() argument
329 return radix_tree_gang_lookup(&nm_i->nat_set_root, (void **)ep, in __gang_lookup_nat_set()
401 struct f2fs_nm_info *nm_i = NM_I(sbi); in f2fs_need_dentry_mark() local
406 f2fs_down_read_trace(&nm_i->nat_tree_lock, &lc); in f2fs_need_dentry_mark()
407 e = __lookup_nat_cache(nm_i, nid, false); in f2fs_need_dentry_mark()
413 f2fs_up_read_trace(&nm_i->nat_tree_lock, &lc); in f2fs_need_dentry_mark()
419 struct f2fs_nm_info *nm_i = NM_I(sbi); in f2fs_is_checkpointed_node() local
424 f2fs_down_read_trace(&nm_i->nat_tree_lock, &lc); in f2fs_is_checkpointed_node()
425 e = __lookup_nat_cache(nm_i, nid, false); in f2fs_is_checkpointed_node()
428 f2fs_up_read_trace(&nm_i->nat_tree_lock, &lc); in f2fs_is_checkpointed_node()
434 struct f2fs_nm_info *nm_i = NM_I(sbi); in f2fs_need_inode_block_update() local
440 f2fs_down_read_trace(&nm_i->nat_tree_lock, &nlc); in f2fs_need_inode_block_update()
441 e = __lookup_nat_cache(nm_i, ino, false); in f2fs_need_inode_block_update()
446 f2fs_up_read_trace(&nm_i->nat_tree_lock, &nlc); in f2fs_need_inode_block_update()
455 struct f2fs_nm_info *nm_i = NM_I(sbi); in cache_nat_entry() local
467 f2fs_down_write_trace(&nm_i->nat_tree_lock, &lc); in cache_nat_entry()
468 e = __lookup_nat_cache(nm_i, nid, false); in cache_nat_entry()
470 e = __init_nat_entry(nm_i, new, ne, false, false); in cache_nat_entry()
476 f2fs_up_write_trace(&nm_i->nat_tree_lock, &lc); in cache_nat_entry()
484 struct f2fs_nm_info *nm_i = NM_I(sbi); in set_node_addr() local
490 f2fs_down_write_trace(&nm_i->nat_tree_lock, &lc); in set_node_addr()
491 e = __lookup_nat_cache(nm_i, ni->nid, true); in set_node_addr()
494 e = __init_nat_entry(nm_i, new, NULL, true, true); in set_node_addr()
530 __set_nat_cache_dirty(nm_i, e, init_dirty); in set_node_addr()
534 e = __lookup_nat_cache(nm_i, ni->ino, false); in set_node_addr()
540 f2fs_up_write_trace(&nm_i->nat_tree_lock, &lc); in set_node_addr()
545 struct f2fs_nm_info *nm_i = NM_I(sbi); in f2fs_try_to_free_nats() local
549 if (!f2fs_down_write_trylock_trace(&nm_i->nat_tree_lock, &lc)) in f2fs_try_to_free_nats()
552 spin_lock(&nm_i->nat_list_lock); in f2fs_try_to_free_nats()
556 if (list_empty(&nm_i->nat_entries)) in f2fs_try_to_free_nats()
559 ne = list_first_entry(&nm_i->nat_entries, in f2fs_try_to_free_nats()
562 spin_unlock(&nm_i->nat_list_lock); in f2fs_try_to_free_nats()
564 __del_from_nat_cache(nm_i, ne); in f2fs_try_to_free_nats()
567 spin_lock(&nm_i->nat_list_lock); in f2fs_try_to_free_nats()
569 spin_unlock(&nm_i->nat_list_lock); in f2fs_try_to_free_nats()
571 f2fs_up_write_trace(&nm_i->nat_tree_lock, &lc); in f2fs_try_to_free_nats()
578 struct f2fs_nm_info *nm_i = NM_I(sbi); in f2fs_get_node_info() local
595 f2fs_down_read_trace(&nm_i->nat_tree_lock, &lc); in f2fs_get_node_info()
596 e = __lookup_nat_cache(nm_i, nid, false); in f2fs_get_node_info()
601 f2fs_up_read_trace(&nm_i->nat_tree_lock, &lc); in f2fs_get_node_info()
617 } else if (f2fs_rwsem_is_contended(&nm_i->nat_tree_lock) || in f2fs_get_node_info()
619 f2fs_up_read_trace(&nm_i->nat_tree_lock, &lc); in f2fs_get_node_info()
630 f2fs_up_read_trace(&nm_i->nat_tree_lock, &lc); in f2fs_get_node_info()
636 f2fs_up_read_trace(&nm_i->nat_tree_lock, &lc); in f2fs_get_node_info()
2348 static struct free_nid *__lookup_free_nid_list(struct f2fs_nm_info *nm_i, in __lookup_free_nid_list() argument
2351 return radix_tree_lookup(&nm_i->free_nid_root, n); in __lookup_free_nid_list()
2357 struct f2fs_nm_info *nm_i = NM_I(sbi); in __insert_free_nid() local
2358 int err = radix_tree_insert(&nm_i->free_nid_root, i->nid, i); in __insert_free_nid()
2363 nm_i->nid_cnt[FREE_NID]++; in __insert_free_nid()
2364 list_add_tail(&i->list, &nm_i->free_nid_list); in __insert_free_nid()
2371 struct f2fs_nm_info *nm_i = NM_I(sbi); in __remove_free_nid() local
2374 nm_i->nid_cnt[state]--; in __remove_free_nid()
2377 radix_tree_delete(&nm_i->free_nid_root, i->nid); in __remove_free_nid()
2383 struct f2fs_nm_info *nm_i = NM_I(sbi); in __move_free_nid() local
2387 nm_i->nid_cnt[org_state]--; in __move_free_nid()
2388 nm_i->nid_cnt[dst_state]++; in __move_free_nid()
2395 list_add_tail(&i->list, &nm_i->free_nid_list); in __move_free_nid()
2405 struct f2fs_nm_info *nm_i = NM_I(sbi); in update_free_nid_bitmap() local
2409 if (!test_bit_le(nat_ofs, nm_i->nat_block_bitmap)) in update_free_nid_bitmap()
2413 if (test_bit_le(nid_ofs, nm_i->free_nid_bitmap[nat_ofs])) in update_free_nid_bitmap()
2415 __set_bit_le(nid_ofs, nm_i->free_nid_bitmap[nat_ofs]); in update_free_nid_bitmap()
2416 nm_i->free_nid_count[nat_ofs]++; in update_free_nid_bitmap()
2418 if (!test_bit_le(nid_ofs, nm_i->free_nid_bitmap[nat_ofs])) in update_free_nid_bitmap()
2420 __clear_bit_le(nid_ofs, nm_i->free_nid_bitmap[nat_ofs]); in update_free_nid_bitmap()
2422 nm_i->free_nid_count[nat_ofs]--; in update_free_nid_bitmap()
2430 struct f2fs_nm_info *nm_i = NM_I(sbi); in add_free_nid() local
2452 spin_lock(&nm_i->nid_list_lock); in add_free_nid()
2476 ne = __lookup_nat_cache(nm_i, nid, false); in add_free_nid()
2481 e = __lookup_free_nid_list(nm_i, nid); in add_free_nid()
2494 nm_i->available_nids++; in add_free_nid()
2496 spin_unlock(&nm_i->nid_list_lock); in add_free_nid()
2506 struct f2fs_nm_info *nm_i = NM_I(sbi); in remove_free_nid() local
2510 spin_lock(&nm_i->nid_list_lock); in remove_free_nid()
2511 i = __lookup_free_nid_list(nm_i, nid); in remove_free_nid()
2516 spin_unlock(&nm_i->nid_list_lock); in remove_free_nid()
2525 struct f2fs_nm_info *nm_i = NM_I(sbi); in scan_nat_page() local
2530 __set_bit_le(nat_ofs, nm_i->nat_block_bitmap); in scan_nat_page()
2535 if (unlikely(start_nid >= nm_i->max_nid)) in scan_nat_page()
2578 struct f2fs_nm_info *nm_i = NM_I(sbi); in scan_free_nid_bits() local
2583 f2fs_down_read_trace(&nm_i->nat_tree_lock, &lc); in scan_free_nid_bits()
2585 for (i = 0; i < nm_i->nat_blocks; i++) { in scan_free_nid_bits()
2586 if (!test_bit_le(i, nm_i->nat_block_bitmap)) in scan_free_nid_bits()
2588 if (!nm_i->free_nid_count[i]) in scan_free_nid_bits()
2591 idx = find_next_bit_le(nm_i->free_nid_bitmap[i], in scan_free_nid_bits()
2599 if (nm_i->nid_cnt[FREE_NID] >= MAX_FREE_NIDS) in scan_free_nid_bits()
2606 f2fs_up_read_trace(&nm_i->nat_tree_lock, &lc); in scan_free_nid_bits()
2612 struct f2fs_nm_info *nm_i = NM_I(sbi); in __f2fs_build_free_nids() local
2614 nid_t nid = nm_i->next_scan_nid; in __f2fs_build_free_nids()
2617 if (unlikely(nid >= nm_i->max_nid)) in __f2fs_build_free_nids()
2624 if (nm_i->nid_cnt[FREE_NID] >= NAT_ENTRY_PER_BLOCK) in __f2fs_build_free_nids()
2634 if (nm_i->nid_cnt[FREE_NID] >= NAT_ENTRY_PER_BLOCK) in __f2fs_build_free_nids()
2642 f2fs_down_read_trace(&nm_i->nat_tree_lock, &lc); in __f2fs_build_free_nids()
2646 nm_i->nat_block_bitmap)) { in __f2fs_build_free_nids()
2658 f2fs_up_read_trace(&nm_i->nat_tree_lock, &lc); in __f2fs_build_free_nids()
2672 if (unlikely(nid >= nm_i->max_nid)) in __f2fs_build_free_nids()
2680 nm_i->next_scan_nid = nid; in __f2fs_build_free_nids()
2685 f2fs_up_read_trace(&nm_i->nat_tree_lock, &lc); in __f2fs_build_free_nids()
2687 f2fs_ra_meta_pages(sbi, NAT_BLOCK_OFFSET(nm_i->next_scan_nid), in __f2fs_build_free_nids()
2688 nm_i->ra_nid_pages, META_NAT, false); in __f2fs_build_free_nids()
2711 struct f2fs_nm_info *nm_i = NM_I(sbi); in f2fs_alloc_nid() local
2717 spin_lock(&nm_i->nid_list_lock); in f2fs_alloc_nid()
2719 if (unlikely(nm_i->available_nids == 0)) { in f2fs_alloc_nid()
2720 spin_unlock(&nm_i->nid_list_lock); in f2fs_alloc_nid()
2725 if (nm_i->nid_cnt[FREE_NID] && !on_f2fs_build_free_nids(nm_i)) { in f2fs_alloc_nid()
2726 f2fs_bug_on(sbi, list_empty(&nm_i->free_nid_list)); in f2fs_alloc_nid()
2727 i = list_first_entry(&nm_i->free_nid_list, in f2fs_alloc_nid()
2731 spin_unlock(&nm_i->nid_list_lock); in f2fs_alloc_nid()
2744 nm_i->available_nids--; in f2fs_alloc_nid()
2748 spin_unlock(&nm_i->nid_list_lock); in f2fs_alloc_nid()
2751 spin_unlock(&nm_i->nid_list_lock); in f2fs_alloc_nid()
2764 struct f2fs_nm_info *nm_i = NM_I(sbi); in f2fs_alloc_nid_done() local
2767 spin_lock(&nm_i->nid_list_lock); in f2fs_alloc_nid_done()
2768 i = __lookup_free_nid_list(nm_i, nid); in f2fs_alloc_nid_done()
2771 spin_unlock(&nm_i->nid_list_lock); in f2fs_alloc_nid_done()
2781 struct f2fs_nm_info *nm_i = NM_I(sbi); in f2fs_alloc_nid_failed() local
2788 spin_lock(&nm_i->nid_list_lock); in f2fs_alloc_nid_failed()
2789 i = __lookup_free_nid_list(nm_i, nid); in f2fs_alloc_nid_failed()
2799 nm_i->available_nids++; in f2fs_alloc_nid_failed()
2803 spin_unlock(&nm_i->nid_list_lock); in f2fs_alloc_nid_failed()
2811 struct f2fs_nm_info *nm_i = NM_I(sbi); in f2fs_try_to_free_nids() local
2814 if (nm_i->nid_cnt[FREE_NID] <= MAX_FREE_NIDS) in f2fs_try_to_free_nids()
2817 if (!mutex_trylock(&nm_i->build_lock)) in f2fs_try_to_free_nids()
2820 while (nr_shrink && nm_i->nid_cnt[FREE_NID] > MAX_FREE_NIDS) { in f2fs_try_to_free_nids()
2824 spin_lock(&nm_i->nid_list_lock); in f2fs_try_to_free_nids()
2825 list_for_each_entry_safe(i, next, &nm_i->free_nid_list, list) { in f2fs_try_to_free_nids()
2827 nm_i->nid_cnt[FREE_NID] <= MAX_FREE_NIDS) in f2fs_try_to_free_nids()
2834 spin_unlock(&nm_i->nid_list_lock); in f2fs_try_to_free_nids()
2837 mutex_unlock(&nm_i->build_lock); in f2fs_try_to_free_nids()
3039 struct f2fs_nm_info *nm_i = NM_I(sbi); in remove_nats_in_journal() local
3058 ne = __lookup_nat_cache(nm_i, nid, true); in remove_nats_in_journal()
3062 __init_nat_entry(nm_i, ne, &raw_ne, true, true); in remove_nats_in_journal()
3072 spin_lock(&nm_i->nid_list_lock); in remove_nats_in_journal()
3073 nm_i->available_nids--; in remove_nats_in_journal()
3074 spin_unlock(&nm_i->nid_list_lock); in remove_nats_in_journal()
3077 __set_nat_cache_dirty(nm_i, ne, init_dirty); in remove_nats_in_journal()
3104 struct f2fs_nm_info *nm_i = NM_I(sbi); in __update_nat_bits() local
3121 __set_bit_le(nat_index, nm_i->empty_nat_bits); in __update_nat_bits()
3122 __clear_bit_le(nat_index, nm_i->full_nat_bits); in __update_nat_bits()
3126 __clear_bit_le(nat_index, nm_i->empty_nat_bits); in __update_nat_bits()
3128 __set_bit_le(nat_index, nm_i->full_nat_bits); in __update_nat_bits()
3130 __clear_bit_le(nat_index, nm_i->full_nat_bits); in __update_nat_bits()
3213 struct f2fs_nm_info *nm_i = NM_I(sbi); in f2fs_flush_nat_entries() local
3229 f2fs_down_write_trace(&nm_i->nat_tree_lock, &lc); in f2fs_flush_nat_entries()
3231 f2fs_up_write_trace(&nm_i->nat_tree_lock, &lc); in f2fs_flush_nat_entries()
3234 if (!nm_i->nat_cnt[DIRTY_NAT]) in f2fs_flush_nat_entries()
3237 f2fs_down_write_trace(&nm_i->nat_tree_lock, &lc); in f2fs_flush_nat_entries()
3246 nm_i->nat_cnt[DIRTY_NAT], NAT_JOURNAL)) in f2fs_flush_nat_entries()
3249 while ((found = __gang_lookup_nat_set(nm_i, in f2fs_flush_nat_entries()
3278 f2fs_up_write_trace(&nm_i->nat_tree_lock, &lc); in f2fs_flush_nat_entries()
3287 struct f2fs_nm_info *nm_i = NM_I(sbi); in __get_nat_bitmaps() local
3288 unsigned int nat_bits_bytes = nm_i->nat_blocks / BITS_PER_BYTE; in __get_nat_bitmaps()
3296 nm_i->nat_bits_blocks = F2FS_BLK_ALIGN((nat_bits_bytes << 1) + 8); in __get_nat_bitmaps()
3297 nm_i->nat_bits = f2fs_kvzalloc(sbi, in __get_nat_bitmaps()
3298 F2FS_BLK_TO_BYTES(nm_i->nat_bits_blocks), GFP_KERNEL); in __get_nat_bitmaps()
3299 if (!nm_i->nat_bits) in __get_nat_bitmaps()
3303 nm_i->nat_bits_blocks; in __get_nat_bitmaps()
3304 for (i = 0; i < nm_i->nat_bits_blocks; i++) { in __get_nat_bitmaps()
3311 memcpy(nm_i->nat_bits + F2FS_BLK_TO_BYTES(i), in __get_nat_bitmaps()
3317 if (cpu_to_le64(cp_ver) != *(__le64 *)nm_i->nat_bits) { in __get_nat_bitmaps()
3322 nm_i->full_nat_bits = nm_i->nat_bits + 8; in __get_nat_bitmaps()
3323 nm_i->empty_nat_bits = nm_i->full_nat_bits + nat_bits_bytes; in __get_nat_bitmaps()
3331 struct f2fs_nm_info *nm_i = NM_I(sbi); in load_free_nid_bitmap() local
3338 for (i = 0; i < nm_i->nat_blocks; i++) { in load_free_nid_bitmap()
3339 i = find_next_bit_le(nm_i->empty_nat_bits, nm_i->nat_blocks, i); in load_free_nid_bitmap()
3340 if (i >= nm_i->nat_blocks) in load_free_nid_bitmap()
3343 __set_bit_le(i, nm_i->nat_block_bitmap); in load_free_nid_bitmap()
3354 for (i = 0; i < nm_i->nat_blocks; i++) { in load_free_nid_bitmap()
3355 i = find_next_bit_le(nm_i->full_nat_bits, nm_i->nat_blocks, i); in load_free_nid_bitmap()
3356 if (i >= nm_i->nat_blocks) in load_free_nid_bitmap()
3359 __set_bit_le(i, nm_i->nat_block_bitmap); in load_free_nid_bitmap()
3366 struct f2fs_nm_info *nm_i = NM_I(sbi); in init_node_manager() local
3371 nm_i->nat_blkaddr = le32_to_cpu(sb_raw->nat_blkaddr); in init_node_manager()
3375 nm_i->nat_blocks = nat_segs << le32_to_cpu(sb_raw->log_blocks_per_seg); in init_node_manager()
3376 nm_i->max_nid = NAT_ENTRY_PER_BLOCK * nm_i->nat_blocks; in init_node_manager()
3379 nm_i->available_nids = nm_i->max_nid - sbi->total_valid_node_count - in init_node_manager()
3381 nm_i->nid_cnt[FREE_NID] = 0; in init_node_manager()
3382 nm_i->nid_cnt[PREALLOC_NID] = 0; in init_node_manager()
3383 nm_i->ram_thresh = DEF_RAM_THRESHOLD; in init_node_manager()
3384 nm_i->ra_nid_pages = DEF_RA_NID_PAGES; in init_node_manager()
3385 nm_i->dirty_nats_ratio = DEF_DIRTY_NAT_RATIO_THRESHOLD; in init_node_manager()
3386 nm_i->max_rf_node_blocks = DEF_RF_NODE_BLOCKS; in init_node_manager()
3388 INIT_RADIX_TREE(&nm_i->free_nid_root, GFP_ATOMIC); in init_node_manager()
3389 INIT_LIST_HEAD(&nm_i->free_nid_list); in init_node_manager()
3390 INIT_RADIX_TREE(&nm_i->nat_root, GFP_NOIO); in init_node_manager()
3391 INIT_RADIX_TREE(&nm_i->nat_set_root, GFP_NOIO); in init_node_manager()
3392 INIT_LIST_HEAD(&nm_i->nat_entries); in init_node_manager()
3393 spin_lock_init(&nm_i->nat_list_lock); in init_node_manager()
3395 mutex_init(&nm_i->build_lock); in init_node_manager()
3396 spin_lock_init(&nm_i->nid_list_lock); in init_node_manager()
3397 init_f2fs_rwsem_trace(&nm_i->nat_tree_lock, sbi, in init_node_manager()
3400 nm_i->next_scan_nid = le32_to_cpu(sbi->ckpt->next_free_nid); in init_node_manager()
3401 nm_i->bitmap_size = __bitmap_size(sbi, NAT_BITMAP); in init_node_manager()
3403 nm_i->nat_bitmap = kmemdup(version_bitmap, nm_i->bitmap_size, in init_node_manager()
3405 if (!nm_i->nat_bitmap) in init_node_manager()
3416 nm_i->nat_bitmap_mir = kmemdup(version_bitmap, nm_i->bitmap_size, in init_node_manager()
3418 if (!nm_i->nat_bitmap_mir) in init_node_manager()
3427 struct f2fs_nm_info *nm_i = NM_I(sbi); in init_free_nid_cache() local
3430 nm_i->free_nid_bitmap = in init_free_nid_cache()
3432 nm_i->nat_blocks), in init_free_nid_cache()
3434 if (!nm_i->free_nid_bitmap) in init_free_nid_cache()
3437 for (i = 0; i < nm_i->nat_blocks; i++) { in init_free_nid_cache()
3438 nm_i->free_nid_bitmap[i] = f2fs_kvzalloc(sbi, in init_free_nid_cache()
3440 if (!nm_i->free_nid_bitmap[i]) in init_free_nid_cache()
3444 nm_i->nat_block_bitmap = f2fs_kvzalloc(sbi, nm_i->nat_blocks / 8, in init_free_nid_cache()
3446 if (!nm_i->nat_block_bitmap) in init_free_nid_cache()
3449 nm_i->free_nid_count = in init_free_nid_cache()
3451 nm_i->nat_blocks), in init_free_nid_cache()
3453 if (!nm_i->free_nid_count) in init_free_nid_cache()
3483 struct f2fs_nm_info *nm_i = NM_I(sbi); in f2fs_destroy_node_manager() local
3492 if (!nm_i) in f2fs_destroy_node_manager()
3496 spin_lock(&nm_i->nid_list_lock); in f2fs_destroy_node_manager()
3497 list_for_each_entry_safe(i, next_i, &nm_i->free_nid_list, list) { in f2fs_destroy_node_manager()
3499 spin_unlock(&nm_i->nid_list_lock); in f2fs_destroy_node_manager()
3501 spin_lock(&nm_i->nid_list_lock); in f2fs_destroy_node_manager()
3503 f2fs_bug_on(sbi, nm_i->nid_cnt[FREE_NID]); in f2fs_destroy_node_manager()
3504 f2fs_bug_on(sbi, nm_i->nid_cnt[PREALLOC_NID]); in f2fs_destroy_node_manager()
3505 f2fs_bug_on(sbi, !list_empty(&nm_i->free_nid_list)); in f2fs_destroy_node_manager()
3506 spin_unlock(&nm_i->nid_list_lock); in f2fs_destroy_node_manager()
3509 f2fs_down_write_trace(&nm_i->nat_tree_lock, &lc); in f2fs_destroy_node_manager()
3510 while ((found = __gang_lookup_nat_cache(nm_i, in f2fs_destroy_node_manager()
3516 spin_lock(&nm_i->nat_list_lock); in f2fs_destroy_node_manager()
3518 spin_unlock(&nm_i->nat_list_lock); in f2fs_destroy_node_manager()
3520 __del_from_nat_cache(nm_i, natvec[idx]); in f2fs_destroy_node_manager()
3523 f2fs_bug_on(sbi, nm_i->nat_cnt[TOTAL_NAT]); in f2fs_destroy_node_manager()
3528 while ((found = __gang_lookup_nat_set(nm_i, in f2fs_destroy_node_manager()
3536 radix_tree_delete(&nm_i->nat_set_root, setvec[idx]->set); in f2fs_destroy_node_manager()
3540 f2fs_up_write_trace(&nm_i->nat_tree_lock, &lc); in f2fs_destroy_node_manager()
3542 kvfree(nm_i->nat_block_bitmap); in f2fs_destroy_node_manager()
3543 if (nm_i->free_nid_bitmap) { in f2fs_destroy_node_manager()
3546 for (i = 0; i < nm_i->nat_blocks; i++) in f2fs_destroy_node_manager()
3547 kvfree(nm_i->free_nid_bitmap[i]); in f2fs_destroy_node_manager()
3548 kvfree(nm_i->free_nid_bitmap); in f2fs_destroy_node_manager()
3550 kvfree(nm_i->free_nid_count); in f2fs_destroy_node_manager()
3552 kfree(nm_i->nat_bitmap); in f2fs_destroy_node_manager()
3553 kvfree(nm_i->nat_bits); in f2fs_destroy_node_manager()
3555 kfree(nm_i->nat_bitmap_mir); in f2fs_destroy_node_manager()
3558 kfree(nm_i); in f2fs_destroy_node_manager()