Lines Matching refs:sbi

36 int f2fs_check_nid_range(struct f2fs_sb_info *sbi, nid_t nid)  in f2fs_check_nid_range()  argument
38 if (unlikely(nid < F2FS_ROOT_INO(sbi) || nid >= NM_I(sbi)->max_nid)) { in f2fs_check_nid_range()
39 set_sbi_flag(sbi, SBI_NEED_FSCK); in f2fs_check_nid_range()
40 f2fs_msg(sbi->sb, KERN_WARNING, in f2fs_check_nid_range()
48 bool f2fs_available_free_memory(struct f2fs_sb_info *sbi, int type) in f2fs_available_free_memory() argument
50 struct f2fs_nm_info *nm_i = NM_I(sbi); in f2fs_available_free_memory()
72 if (excess_cached_nats(sbi)) in f2fs_available_free_memory()
75 if (sbi->sb->s_bdi->wb.dirty_exceeded) in f2fs_available_free_memory()
77 mem_size = get_pages(sbi, F2FS_DIRTY_DENTS); in f2fs_available_free_memory()
83 mem_size += sbi->im[i].ino_num * in f2fs_available_free_memory()
88 mem_size = (atomic_read(&sbi->total_ext_tree) * in f2fs_available_free_memory()
90 atomic_read(&sbi->total_ext_node) * in f2fs_available_free_memory()
95 mem_size = get_pages(sbi, F2FS_INMEM_PAGES); in f2fs_available_free_memory()
98 if (!sbi->sb->s_bdi->wb.dirty_exceeded) in f2fs_available_free_memory()
114 static struct page *get_current_nat_page(struct f2fs_sb_info *sbi, nid_t nid) in get_current_nat_page() argument
116 return f2fs_get_meta_page_nofail(sbi, current_nat_addr(sbi, nid)); in get_current_nat_page()
119 static struct page *get_next_nat_page(struct f2fs_sb_info *sbi, nid_t nid) in get_next_nat_page() argument
126 struct f2fs_nm_info *nm_i = NM_I(sbi); in get_next_nat_page()
128 dst_off = next_nat_addr(sbi, current_nat_addr(sbi, nid)); in get_next_nat_page()
131 src_page = get_current_nat_page(sbi, nid); in get_next_nat_page()
132 dst_page = f2fs_grab_meta_page(sbi, dst_off); in get_next_nat_page()
133 f2fs_bug_on(sbi, PageDirty(src_page)); in get_next_nat_page()
288 bool f2fs_in_warm_node_list(struct f2fs_sb_info *sbi, struct page *page) in f2fs_in_warm_node_list() argument
290 return NODE_MAPPING(sbi) == page->mapping && in f2fs_in_warm_node_list()
294 void f2fs_init_fsync_node_info(struct f2fs_sb_info *sbi) in f2fs_init_fsync_node_info() argument
296 spin_lock_init(&sbi->fsync_node_lock); in f2fs_init_fsync_node_info()
297 INIT_LIST_HEAD(&sbi->fsync_node_list); in f2fs_init_fsync_node_info()
298 sbi->fsync_seg_id = 0; in f2fs_init_fsync_node_info()
299 sbi->fsync_node_num = 0; in f2fs_init_fsync_node_info()
302 static unsigned int f2fs_add_fsync_node_entry(struct f2fs_sb_info *sbi, in f2fs_add_fsync_node_entry() argument
315 spin_lock_irqsave(&sbi->fsync_node_lock, flags); in f2fs_add_fsync_node_entry()
316 list_add_tail(&fn->list, &sbi->fsync_node_list); in f2fs_add_fsync_node_entry()
317 fn->seq_id = sbi->fsync_seg_id++; in f2fs_add_fsync_node_entry()
319 sbi->fsync_node_num++; in f2fs_add_fsync_node_entry()
320 spin_unlock_irqrestore(&sbi->fsync_node_lock, flags); in f2fs_add_fsync_node_entry()
325 void f2fs_del_fsync_node_entry(struct f2fs_sb_info *sbi, struct page *page) in f2fs_del_fsync_node_entry() argument
330 spin_lock_irqsave(&sbi->fsync_node_lock, flags); in f2fs_del_fsync_node_entry()
331 list_for_each_entry(fn, &sbi->fsync_node_list, list) { in f2fs_del_fsync_node_entry()
334 sbi->fsync_node_num--; in f2fs_del_fsync_node_entry()
335 spin_unlock_irqrestore(&sbi->fsync_node_lock, flags); in f2fs_del_fsync_node_entry()
341 spin_unlock_irqrestore(&sbi->fsync_node_lock, flags); in f2fs_del_fsync_node_entry()
342 f2fs_bug_on(sbi, 1); in f2fs_del_fsync_node_entry()
345 void f2fs_reset_fsync_node_info(struct f2fs_sb_info *sbi) in f2fs_reset_fsync_node_info() argument
349 spin_lock_irqsave(&sbi->fsync_node_lock, flags); in f2fs_reset_fsync_node_info()
350 sbi->fsync_seg_id = 0; in f2fs_reset_fsync_node_info()
351 spin_unlock_irqrestore(&sbi->fsync_node_lock, flags); in f2fs_reset_fsync_node_info()
354 int f2fs_need_dentry_mark(struct f2fs_sb_info *sbi, nid_t nid) in f2fs_need_dentry_mark() argument
356 struct f2fs_nm_info *nm_i = NM_I(sbi); in f2fs_need_dentry_mark()
371 bool f2fs_is_checkpointed_node(struct f2fs_sb_info *sbi, nid_t nid) in f2fs_is_checkpointed_node() argument
373 struct f2fs_nm_info *nm_i = NM_I(sbi); in f2fs_is_checkpointed_node()
385 bool f2fs_need_inode_block_update(struct f2fs_sb_info *sbi, nid_t ino) in f2fs_need_inode_block_update() argument
387 struct f2fs_nm_info *nm_i = NM_I(sbi); in f2fs_need_inode_block_update()
402 static void cache_nat_entry(struct f2fs_sb_info *sbi, nid_t nid, in cache_nat_entry() argument
405 struct f2fs_nm_info *nm_i = NM_I(sbi); in cache_nat_entry()
417 f2fs_bug_on(sbi, nat_get_ino(e) != le32_to_cpu(ne->ino) || in cache_nat_entry()
426 static void set_node_addr(struct f2fs_sb_info *sbi, struct node_info *ni, in set_node_addr() argument
429 struct f2fs_nm_info *nm_i = NM_I(sbi); in set_node_addr()
438 f2fs_bug_on(sbi, ni->blk_addr == NEW_ADDR); in set_node_addr()
446 f2fs_bug_on(sbi, ni->blk_addr != NULL_ADDR); in set_node_addr()
453 f2fs_bug_on(sbi, nat_get_blkaddr(e) != ni->blk_addr); in set_node_addr()
454 f2fs_bug_on(sbi, nat_get_blkaddr(e) == NULL_ADDR && in set_node_addr()
456 f2fs_bug_on(sbi, nat_get_blkaddr(e) == NEW_ADDR && in set_node_addr()
458 f2fs_bug_on(sbi, is_valid_data_blkaddr(sbi, nat_get_blkaddr(e)) && in set_node_addr()
469 if (!is_valid_data_blkaddr(sbi, new_blkaddr)) in set_node_addr()
484 int f2fs_try_to_free_nats(struct f2fs_sb_info *sbi, int nr_shrink) in f2fs_try_to_free_nats() argument
486 struct f2fs_nm_info *nm_i = NM_I(sbi); in f2fs_try_to_free_nats()
518 int f2fs_get_node_info(struct f2fs_sb_info *sbi, nid_t nid, in f2fs_get_node_info() argument
521 struct f2fs_nm_info *nm_i = NM_I(sbi); in f2fs_get_node_info()
522 struct curseg_info *curseg = CURSEG_I(sbi, CURSEG_HOT_DATA); in f2fs_get_node_info()
561 index = current_nat_addr(sbi, nid); in f2fs_get_node_info()
564 page = f2fs_get_meta_page(sbi, index); in f2fs_get_node_info()
574 cache_nat_entry(sbi, nid, &ne); in f2fs_get_node_info()
583 struct f2fs_sb_info *sbi = F2FS_P_SB(parent); in f2fs_ra_node_pages() local
595 f2fs_ra_node_page(sbi, nid); in f2fs_ra_node_pages()
718 struct f2fs_sb_info *sbi = F2FS_I_SB(dn->inode); in f2fs_get_dnode_of_data() local
735 npage[0] = f2fs_get_node_page(sbi, nids[0]); in f2fs_get_dnode_of_data()
759 if (!f2fs_alloc_nid(sbi, &(nids[i]))) { in f2fs_get_dnode_of_data()
767 f2fs_alloc_nid_failed(sbi, nids[i]); in f2fs_get_dnode_of_data()
773 f2fs_alloc_nid_done(sbi, nids[i]); in f2fs_get_dnode_of_data()
791 npage[i] = f2fs_get_node_page(sbi, nids[i]); in f2fs_get_dnode_of_data()
827 struct f2fs_sb_info *sbi = F2FS_I_SB(dn->inode); in truncate_node() local
831 err = f2fs_get_node_info(sbi, dn->nid, &ni); in truncate_node()
836 f2fs_invalidate_blocks(sbi, ni.blk_addr); in truncate_node()
837 dec_valid_node_count(sbi, dn->inode, dn->nid == dn->inode->i_ino); in truncate_node()
838 set_node_addr(sbi, &ni, NULL_ADDR, false); in truncate_node()
841 f2fs_remove_orphan_inode(sbi, dn->nid); in truncate_node()
842 dec_valid_inode_count(sbi); in truncate_node()
847 set_sbi_flag(sbi, SBI_IS_DIRTY); in truncate_node()
851 invalidate_mapping_pages(NODE_MAPPING(sbi), in truncate_node()
1030 struct f2fs_sb_info *sbi = F2FS_I_SB(inode); in f2fs_truncate_inode_blocks() local
1044 page = f2fs_get_node_page(sbi, inode->i_ino); in f2fs_truncate_inode_blocks()
1107 BUG_ON(page->mapping != NODE_MAPPING(sbi)); in f2fs_truncate_inode_blocks()
1126 struct f2fs_sb_info *sbi = F2FS_I_SB(inode); in f2fs_truncate_xattr_node() local
1135 npage = f2fs_get_node_page(sbi, nid); in f2fs_truncate_xattr_node()
1206 struct f2fs_sb_info *sbi = F2FS_I_SB(dn->inode); in f2fs_new_node_page() local
1214 page = f2fs_grab_cache_page(NODE_MAPPING(sbi), dn->nid, false); in f2fs_new_node_page()
1218 if (unlikely((err = inc_valid_node_count(sbi, dn->inode, !ofs)))) in f2fs_new_node_page()
1222 err = f2fs_get_node_info(sbi, dn->nid, &new_ni); in f2fs_new_node_page()
1224 dec_valid_node_count(sbi, dn->inode, !ofs); in f2fs_new_node_page()
1227 f2fs_bug_on(sbi, new_ni.blk_addr != NULL_ADDR); in f2fs_new_node_page()
1234 set_node_addr(sbi, &new_ni, NEW_ADDR, false); in f2fs_new_node_page()
1248 inc_valid_inode_count(sbi); in f2fs_new_node_page()
1264 struct f2fs_sb_info *sbi = F2FS_P_SB(page); in read_node_page() local
1267 .sbi = sbi, in read_node_page()
1278 f2fs_bug_on(sbi, !f2fs_inode_chksum_verify(sbi, page)); in read_node_page()
1283 err = f2fs_get_node_info(sbi, page->index, &ni); in read_node_page()
1288 is_sbi_flag_set(sbi, SBI_IS_SHUTDOWN)) { in read_node_page()
1300 void f2fs_ra_node_page(struct f2fs_sb_info *sbi, nid_t nid) in f2fs_ra_node_page() argument
1307 if (f2fs_check_nid_range(sbi, nid)) in f2fs_ra_node_page()
1311 apage = radix_tree_lookup(&NODE_MAPPING(sbi)->i_pages, nid); in f2fs_ra_node_page()
1316 apage = f2fs_grab_cache_page(NODE_MAPPING(sbi), nid, false); in f2fs_ra_node_page()
1324 static struct page *__get_node_page(struct f2fs_sb_info *sbi, pgoff_t nid, in __get_node_page() argument
1332 if (f2fs_check_nid_range(sbi, nid)) in __get_node_page()
1335 page = f2fs_grab_cache_page(NODE_MAPPING(sbi), nid, false); in __get_node_page()
1353 if (unlikely(page->mapping != NODE_MAPPING(sbi))) { in __get_node_page()
1363 if (!f2fs_inode_chksum_verify(sbi, page)) { in __get_node_page()
1369 f2fs_msg(sbi->sb, KERN_WARNING, "inconsistent node block, " in __get_node_page()
1383 struct page *f2fs_get_node_page(struct f2fs_sb_info *sbi, pgoff_t nid) in f2fs_get_node_page() argument
1385 return __get_node_page(sbi, nid, NULL, 0); in f2fs_get_node_page()
1390 struct f2fs_sb_info *sbi = F2FS_P_SB(parent); in f2fs_get_node_page_ra() local
1393 return __get_node_page(sbi, nid, parent, start); in f2fs_get_node_page_ra()
1396 static void flush_inline_data(struct f2fs_sb_info *sbi, nid_t ino) in flush_inline_data() argument
1403 inode = ilookup(sbi->sb, ino); in flush_inline_data()
1432 static struct page *last_fsync_dnode(struct f2fs_sb_info *sbi, nid_t ino) in last_fsync_dnode() argument
1442 while ((nr_pages = pagevec_lookup_tag(&pvec, NODE_MAPPING(sbi), &index, in last_fsync_dnode()
1449 if (unlikely(f2fs_cp_error(sbi))) { in last_fsync_dnode()
1462 if (unlikely(page->mapping != NODE_MAPPING(sbi))) { in last_fsync_dnode()
1492 struct f2fs_sb_info *sbi = F2FS_P_SB(page); in __write_node_page() local
1496 .sbi = sbi, in __write_node_page()
1511 if (unlikely(f2fs_cp_error(sbi))) in __write_node_page()
1514 if (unlikely(is_sbi_flag_set(sbi, SBI_POR_DOING))) in __write_node_page()
1523 f2fs_bug_on(sbi, page->index != nid); in __write_node_page()
1525 if (f2fs_get_node_info(sbi, nid, &ni)) in __write_node_page()
1529 if (!down_read_trylock(&sbi->node_write)) in __write_node_page()
1532 down_read(&sbi->node_write); in __write_node_page()
1538 dec_page_count(sbi, F2FS_DIRTY_NODES); in __write_node_page()
1539 up_read(&sbi->node_write); in __write_node_page()
1545 !f2fs_is_valid_blkaddr(sbi, ni.blk_addr, DATA_GENERIC)) in __write_node_page()
1548 if (atomic && !test_opt(sbi, NOBARRIER)) in __write_node_page()
1554 if (f2fs_in_warm_node_list(sbi, page)) { in __write_node_page()
1555 seq = f2fs_add_fsync_node_entry(sbi, page); in __write_node_page()
1562 set_node_addr(sbi, &ni, fio.new_blkaddr, is_fsync_dnode(page)); in __write_node_page()
1563 dec_page_count(sbi, F2FS_DIRTY_NODES); in __write_node_page()
1564 up_read(&sbi->node_write); in __write_node_page()
1567 f2fs_submit_merged_write_cond(sbi, page->mapping->host, 0, in __write_node_page()
1574 if (unlikely(f2fs_cp_error(sbi))) { in __write_node_page()
1575 f2fs_submit_merged_write(sbi, NODE); in __write_node_page()
1582 f2fs_balance_fs(sbi, false); in __write_node_page()
1628 int f2fs_fsync_node_pages(struct f2fs_sb_info *sbi, struct inode *inode, in f2fs_fsync_node_pages() argument
1642 last_page = last_fsync_dnode(sbi, ino); in f2fs_fsync_node_pages()
1650 while ((nr_pages = pagevec_lookup_tag(&pvec, NODE_MAPPING(sbi), &index, in f2fs_fsync_node_pages()
1658 if (unlikely(f2fs_cp_error(sbi))) { in f2fs_fsync_node_pages()
1672 if (unlikely(page->mapping != NODE_MAPPING(sbi))) { in f2fs_fsync_node_pages()
1698 f2fs_need_dentry_mark(sbi, ino)); in f2fs_fsync_node_pages()
1733 f2fs_msg(sbi->sb, KERN_DEBUG, in f2fs_fsync_node_pages()
1744 f2fs_submit_merged_write_cond(sbi, NULL, ino, last_idx, NODE); in f2fs_fsync_node_pages()
1748 int f2fs_sync_node_pages(struct f2fs_sb_info *sbi, in f2fs_sync_node_pages() argument
1765 NODE_MAPPING(sbi), &index, PAGECACHE_TAG_DIRTY))) { in f2fs_sync_node_pages()
1773 if (atomic_read(&sbi->wb_sync_req[NODE]) && in f2fs_sync_node_pages()
1799 if (unlikely(page->mapping != NODE_MAPPING(sbi))) { in f2fs_sync_node_pages()
1814 flush_inline_data(sbi, ino_of_node(page)); in f2fs_sync_node_pages()
1854 f2fs_submit_merged_write(sbi, NODE); in f2fs_sync_node_pages()
1856 if (unlikely(f2fs_cp_error(sbi))) in f2fs_sync_node_pages()
1861 int f2fs_wait_on_node_pages_writeback(struct f2fs_sb_info *sbi, in f2fs_wait_on_node_pages_writeback() argument
1866 struct list_head *head = &sbi->fsync_node_list; in f2fs_wait_on_node_pages_writeback()
1872 spin_lock_irqsave(&sbi->fsync_node_lock, flags); in f2fs_wait_on_node_pages_writeback()
1874 spin_unlock_irqrestore(&sbi->fsync_node_lock, flags); in f2fs_wait_on_node_pages_writeback()
1879 spin_unlock_irqrestore(&sbi->fsync_node_lock, flags); in f2fs_wait_on_node_pages_writeback()
1885 spin_unlock_irqrestore(&sbi->fsync_node_lock, flags); in f2fs_wait_on_node_pages_writeback()
1897 ret2 = filemap_check_errors(NODE_MAPPING(sbi)); in f2fs_wait_on_node_pages_writeback()
1907 struct f2fs_sb_info *sbi = F2FS_M_SB(mapping); in f2fs_write_node_pages() local
1911 if (unlikely(is_sbi_flag_set(sbi, SBI_POR_DOING))) in f2fs_write_node_pages()
1915 f2fs_balance_fs_bg(sbi); in f2fs_write_node_pages()
1918 if (get_pages(sbi, F2FS_DIRTY_NODES) < nr_pages_to_skip(sbi, NODE)) in f2fs_write_node_pages()
1922 atomic_inc(&sbi->wb_sync_req[NODE]); in f2fs_write_node_pages()
1923 else if (atomic_read(&sbi->wb_sync_req[NODE])) in f2fs_write_node_pages()
1928 diff = nr_pages_to_write(sbi, NODE, wbc); in f2fs_write_node_pages()
1930 f2fs_sync_node_pages(sbi, wbc, true, FS_NODE_IO); in f2fs_write_node_pages()
1935 atomic_dec(&sbi->wb_sync_req[NODE]); in f2fs_write_node_pages()
1939 wbc->pages_skipped += get_pages(sbi, F2FS_DIRTY_NODES); in f2fs_write_node_pages()
1984 static int __insert_free_nid(struct f2fs_sb_info *sbi, in __insert_free_nid() argument
1987 struct f2fs_nm_info *nm_i = NM_I(sbi); in __insert_free_nid()
1993 f2fs_bug_on(sbi, state != i->state); in __insert_free_nid()
2000 static void __remove_free_nid(struct f2fs_sb_info *sbi, in __remove_free_nid() argument
2003 struct f2fs_nm_info *nm_i = NM_I(sbi); in __remove_free_nid()
2005 f2fs_bug_on(sbi, state != i->state); in __remove_free_nid()
2012 static void __move_free_nid(struct f2fs_sb_info *sbi, struct free_nid *i, in __move_free_nid() argument
2015 struct f2fs_nm_info *nm_i = NM_I(sbi); in __move_free_nid()
2017 f2fs_bug_on(sbi, org_state != i->state); in __move_free_nid()
2034 static void update_free_nid_bitmap(struct f2fs_sb_info *sbi, nid_t nid, in update_free_nid_bitmap() argument
2037 struct f2fs_nm_info *nm_i = NM_I(sbi); in update_free_nid_bitmap()
2059 static bool add_free_nid(struct f2fs_sb_info *sbi, in add_free_nid() argument
2062 struct f2fs_nm_info *nm_i = NM_I(sbi); in add_free_nid()
2115 err = __insert_free_nid(sbi, i, FREE_NID); in add_free_nid()
2118 update_free_nid_bitmap(sbi, nid, ret, build); in add_free_nid()
2130 static void remove_free_nid(struct f2fs_sb_info *sbi, nid_t nid) in remove_free_nid() argument
2132 struct f2fs_nm_info *nm_i = NM_I(sbi); in remove_free_nid()
2139 __remove_free_nid(sbi, i, FREE_NID); in remove_free_nid()
2148 static int scan_nat_page(struct f2fs_sb_info *sbi, in scan_nat_page() argument
2151 struct f2fs_nm_info *nm_i = NM_I(sbi); in scan_nat_page()
2171 add_free_nid(sbi, start_nid, true, true); in scan_nat_page()
2173 spin_lock(&NM_I(sbi)->nid_list_lock); in scan_nat_page()
2174 update_free_nid_bitmap(sbi, start_nid, false, true); in scan_nat_page()
2175 spin_unlock(&NM_I(sbi)->nid_list_lock); in scan_nat_page()
2182 static void scan_curseg_cache(struct f2fs_sb_info *sbi) in scan_curseg_cache() argument
2184 struct curseg_info *curseg = CURSEG_I(sbi, CURSEG_HOT_DATA); in scan_curseg_cache()
2196 add_free_nid(sbi, nid, true, false); in scan_curseg_cache()
2198 remove_free_nid(sbi, nid); in scan_curseg_cache()
2203 static void scan_free_nid_bits(struct f2fs_sb_info *sbi) in scan_free_nid_bits() argument
2205 struct f2fs_nm_info *nm_i = NM_I(sbi); in scan_free_nid_bits()
2223 add_free_nid(sbi, nid, true, false); in scan_free_nid_bits()
2230 scan_curseg_cache(sbi); in scan_free_nid_bits()
2235 static int __f2fs_build_free_nids(struct f2fs_sb_info *sbi, in __f2fs_build_free_nids() argument
2238 struct f2fs_nm_info *nm_i = NM_I(sbi); in __f2fs_build_free_nids()
2249 if (!sync && !f2fs_available_free_memory(sbi, FREE_NIDS)) in __f2fs_build_free_nids()
2254 scan_free_nid_bits(sbi); in __f2fs_build_free_nids()
2261 f2fs_ra_meta_pages(sbi, NAT_BLOCK_OFFSET(nid), FREE_NID_PAGES, in __f2fs_build_free_nids()
2269 struct page *page = get_current_nat_page(sbi, nid); in __f2fs_build_free_nids()
2271 ret = scan_nat_page(sbi, page, nid); in __f2fs_build_free_nids()
2276 f2fs_bug_on(sbi, !mount); in __f2fs_build_free_nids()
2277 f2fs_msg(sbi->sb, KERN_ERR, in __f2fs_build_free_nids()
2295 scan_curseg_cache(sbi); in __f2fs_build_free_nids()
2299 f2fs_ra_meta_pages(sbi, NAT_BLOCK_OFFSET(nm_i->next_scan_nid), in __f2fs_build_free_nids()
2305 int f2fs_build_free_nids(struct f2fs_sb_info *sbi, bool sync, bool mount) in f2fs_build_free_nids() argument
2309 mutex_lock(&NM_I(sbi)->build_lock); in f2fs_build_free_nids()
2310 ret = __f2fs_build_free_nids(sbi, sync, mount); in f2fs_build_free_nids()
2311 mutex_unlock(&NM_I(sbi)->build_lock); in f2fs_build_free_nids()
2321 bool f2fs_alloc_nid(struct f2fs_sb_info *sbi, nid_t *nid) in f2fs_alloc_nid() argument
2323 struct f2fs_nm_info *nm_i = NM_I(sbi); in f2fs_alloc_nid()
2326 if (time_to_inject(sbi, FAULT_ALLOC_NID)) { in f2fs_alloc_nid()
2340 f2fs_bug_on(sbi, list_empty(&nm_i->free_nid_list)); in f2fs_alloc_nid()
2345 __move_free_nid(sbi, i, FREE_NID, PREALLOC_NID); in f2fs_alloc_nid()
2348 update_free_nid_bitmap(sbi, *nid, false, false); in f2fs_alloc_nid()
2356 f2fs_build_free_nids(sbi, true, false); in f2fs_alloc_nid()
2363 void f2fs_alloc_nid_done(struct f2fs_sb_info *sbi, nid_t nid) in f2fs_alloc_nid_done() argument
2365 struct f2fs_nm_info *nm_i = NM_I(sbi); in f2fs_alloc_nid_done()
2370 f2fs_bug_on(sbi, !i); in f2fs_alloc_nid_done()
2371 __remove_free_nid(sbi, i, PREALLOC_NID); in f2fs_alloc_nid_done()
2380 void f2fs_alloc_nid_failed(struct f2fs_sb_info *sbi, nid_t nid) in f2fs_alloc_nid_failed() argument
2382 struct f2fs_nm_info *nm_i = NM_I(sbi); in f2fs_alloc_nid_failed()
2391 f2fs_bug_on(sbi, !i); in f2fs_alloc_nid_failed()
2393 if (!f2fs_available_free_memory(sbi, FREE_NIDS)) { in f2fs_alloc_nid_failed()
2394 __remove_free_nid(sbi, i, PREALLOC_NID); in f2fs_alloc_nid_failed()
2397 __move_free_nid(sbi, i, PREALLOC_NID, FREE_NID); in f2fs_alloc_nid_failed()
2402 update_free_nid_bitmap(sbi, nid, true, false); in f2fs_alloc_nid_failed()
2410 int f2fs_try_to_free_nids(struct f2fs_sb_info *sbi, int nr_shrink) in f2fs_try_to_free_nids() argument
2412 struct f2fs_nm_info *nm_i = NM_I(sbi); in f2fs_try_to_free_nids()
2428 __remove_free_nid(sbi, i, FREE_NID); in f2fs_try_to_free_nids()
2469 struct f2fs_sb_info *sbi = F2FS_I_SB(inode); in f2fs_recover_xattr_data() local
2481 err = f2fs_get_node_info(sbi, prev_xnid, &ni); in f2fs_recover_xattr_data()
2485 f2fs_invalidate_blocks(sbi, ni.blk_addr); in f2fs_recover_xattr_data()
2486 dec_valid_node_count(sbi, inode, false); in f2fs_recover_xattr_data()
2487 set_node_addr(sbi, &ni, NULL_ADDR, false); in f2fs_recover_xattr_data()
2491 if (!f2fs_alloc_nid(sbi, &new_xnid)) in f2fs_recover_xattr_data()
2497 f2fs_alloc_nid_failed(sbi, new_xnid); in f2fs_recover_xattr_data()
2501 f2fs_alloc_nid_done(sbi, new_xnid); in f2fs_recover_xattr_data()
2513 int f2fs_recover_inode_page(struct f2fs_sb_info *sbi, struct page *page) in f2fs_recover_inode_page() argument
2521 err = f2fs_get_node_info(sbi, ino, &old_ni); in f2fs_recover_inode_page()
2528 ipage = f2fs_grab_cache_page(NODE_MAPPING(sbi), ino, false); in f2fs_recover_inode_page()
2535 remove_free_nid(sbi, ino); in f2fs_recover_inode_page()
2554 if (f2fs_sb_has_flexible_inline_xattr(sbi->sb) && in f2fs_recover_inode_page()
2559 if (f2fs_sb_has_project_quota(sbi->sb) && in f2fs_recover_inode_page()
2568 if (unlikely(inc_valid_node_count(sbi, NULL, true))) in f2fs_recover_inode_page()
2570 set_node_addr(sbi, &new_ni, NEW_ADDR, false); in f2fs_recover_inode_page()
2571 inc_valid_inode_count(sbi); in f2fs_recover_inode_page()
2577 int f2fs_restore_node_summary(struct f2fs_sb_info *sbi, in f2fs_restore_node_summary() argument
2586 last_offset = sbi->blocks_per_seg; in f2fs_restore_node_summary()
2587 addr = START_BLOCK(sbi, segno); in f2fs_restore_node_summary()
2594 f2fs_ra_meta_pages(sbi, addr, nrpages, META_POR, true); in f2fs_restore_node_summary()
2597 struct page *page = f2fs_get_tmp_page(sbi, idx); in f2fs_restore_node_summary()
2610 invalidate_mapping_pages(META_MAPPING(sbi), addr, in f2fs_restore_node_summary()
2616 static void remove_nats_in_journal(struct f2fs_sb_info *sbi) in remove_nats_in_journal() argument
2618 struct f2fs_nm_info *nm_i = NM_I(sbi); in remove_nats_in_journal()
2619 struct curseg_info *curseg = CURSEG_I(sbi, CURSEG_HOT_DATA); in remove_nats_in_journal()
2673 static void __update_nat_bits(struct f2fs_sb_info *sbi, nid_t start_nid, in __update_nat_bits() argument
2676 struct f2fs_nm_info *nm_i = NM_I(sbi); in __update_nat_bits()
2682 if (!enabled_nat_bits(sbi, NULL)) in __update_nat_bits()
2706 static void __flush_nat_entry_set(struct f2fs_sb_info *sbi, in __flush_nat_entry_set() argument
2709 struct curseg_info *curseg = CURSEG_I(sbi, CURSEG_HOT_DATA); in __flush_nat_entry_set()
2722 if (enabled_nat_bits(sbi, cpc) || in __flush_nat_entry_set()
2729 page = get_next_nat_page(sbi, start_nid); in __flush_nat_entry_set()
2731 f2fs_bug_on(sbi, !nat_blk); in __flush_nat_entry_set()
2740 f2fs_bug_on(sbi, nat_get_blkaddr(ne) == NEW_ADDR); in __flush_nat_entry_set()
2745 f2fs_bug_on(sbi, offset < 0); in __flush_nat_entry_set()
2753 __clear_nat_cache_dirty(NM_I(sbi), set, ne); in __flush_nat_entry_set()
2755 add_free_nid(sbi, nid, false, true); in __flush_nat_entry_set()
2757 spin_lock(&NM_I(sbi)->nid_list_lock); in __flush_nat_entry_set()
2758 update_free_nid_bitmap(sbi, nid, false, false); in __flush_nat_entry_set()
2759 spin_unlock(&NM_I(sbi)->nid_list_lock); in __flush_nat_entry_set()
2766 __update_nat_bits(sbi, start_nid, page); in __flush_nat_entry_set()
2772 radix_tree_delete(&NM_I(sbi)->nat_set_root, set->set); in __flush_nat_entry_set()
2780 void f2fs_flush_nat_entries(struct f2fs_sb_info *sbi, struct cp_control *cpc) in f2fs_flush_nat_entries() argument
2782 struct f2fs_nm_info *nm_i = NM_I(sbi); in f2fs_flush_nat_entries()
2783 struct curseg_info *curseg = CURSEG_I(sbi, CURSEG_HOT_DATA); in f2fs_flush_nat_entries()
2792 if (enabled_nat_bits(sbi, cpc)) { in f2fs_flush_nat_entries()
2794 remove_nats_in_journal(sbi); in f2fs_flush_nat_entries()
2808 if (enabled_nat_bits(sbi, cpc) || in f2fs_flush_nat_entries()
2810 remove_nats_in_journal(sbi); in f2fs_flush_nat_entries()
2823 __flush_nat_entry_set(sbi, set, cpc); in f2fs_flush_nat_entries()
2829 static int __get_nat_bitmaps(struct f2fs_sb_info *sbi) in __get_nat_bitmaps() argument
2831 struct f2fs_checkpoint *ckpt = F2FS_CKPT(sbi); in __get_nat_bitmaps()
2832 struct f2fs_nm_info *nm_i = NM_I(sbi); in __get_nat_bitmaps()
2838 if (!enabled_nat_bits(sbi, NULL)) in __get_nat_bitmaps()
2842 nm_i->nat_bits = f2fs_kzalloc(sbi, in __get_nat_bitmaps()
2847 nat_bits_addr = __start_cp_addr(sbi) + sbi->blocks_per_seg - in __get_nat_bitmaps()
2852 page = f2fs_get_meta_page(sbi, nat_bits_addr++); in __get_nat_bitmaps()
2854 disable_nat_bits(sbi, true); in __get_nat_bitmaps()
2865 disable_nat_bits(sbi, true); in __get_nat_bitmaps()
2872 f2fs_msg(sbi->sb, KERN_NOTICE, "Found nat_bits in checkpoint"); in __get_nat_bitmaps()
2876 static inline void load_free_nid_bitmap(struct f2fs_sb_info *sbi) in load_free_nid_bitmap() argument
2878 struct f2fs_nm_info *nm_i = NM_I(sbi); in load_free_nid_bitmap()
2882 if (!enabled_nat_bits(sbi, NULL)) in load_free_nid_bitmap()
2895 spin_lock(&NM_I(sbi)->nid_list_lock); in load_free_nid_bitmap()
2897 update_free_nid_bitmap(sbi, nid, true, true); in load_free_nid_bitmap()
2898 spin_unlock(&NM_I(sbi)->nid_list_lock); in load_free_nid_bitmap()
2910 static int init_node_manager(struct f2fs_sb_info *sbi) in init_node_manager() argument
2912 struct f2fs_super_block *sb_raw = F2FS_RAW_SUPER(sbi); in init_node_manager()
2913 struct f2fs_nm_info *nm_i = NM_I(sbi); in init_node_manager()
2926 nm_i->available_nids = nm_i->max_nid - sbi->total_valid_node_count - in init_node_manager()
2927 sbi->nquota_files - F2FS_RESERVED_NODE_NUM; in init_node_manager()
2946 nm_i->next_scan_nid = le32_to_cpu(sbi->ckpt->next_free_nid); in init_node_manager()
2947 nm_i->bitmap_size = __bitmap_size(sbi, NAT_BITMAP); in init_node_manager()
2948 version_bitmap = __bitmap_ptr(sbi, NAT_BITMAP); in init_node_manager()
2957 err = __get_nat_bitmaps(sbi); in init_node_manager()
2971 static int init_free_nid_cache(struct f2fs_sb_info *sbi) in init_free_nid_cache() argument
2973 struct f2fs_nm_info *nm_i = NM_I(sbi); in init_free_nid_cache()
2977 f2fs_kzalloc(sbi, array_size(sizeof(unsigned char *), in init_free_nid_cache()
2984 nm_i->free_nid_bitmap[i] = f2fs_kvzalloc(sbi, in init_free_nid_cache()
2990 nm_i->nat_block_bitmap = f2fs_kvzalloc(sbi, nm_i->nat_blocks / 8, in init_free_nid_cache()
2996 f2fs_kvzalloc(sbi, array_size(sizeof(unsigned short), in init_free_nid_cache()
3004 int f2fs_build_node_manager(struct f2fs_sb_info *sbi) in f2fs_build_node_manager() argument
3008 sbi->nm_info = f2fs_kzalloc(sbi, sizeof(struct f2fs_nm_info), in f2fs_build_node_manager()
3010 if (!sbi->nm_info) in f2fs_build_node_manager()
3013 err = init_node_manager(sbi); in f2fs_build_node_manager()
3017 err = init_free_nid_cache(sbi); in f2fs_build_node_manager()
3022 load_free_nid_bitmap(sbi); in f2fs_build_node_manager()
3024 return f2fs_build_free_nids(sbi, true, true); in f2fs_build_node_manager()
3027 void f2fs_destroy_node_manager(struct f2fs_sb_info *sbi) in f2fs_destroy_node_manager() argument
3029 struct f2fs_nm_info *nm_i = NM_I(sbi); in f2fs_destroy_node_manager()
3042 __remove_free_nid(sbi, i, FREE_NID); in f2fs_destroy_node_manager()
3047 f2fs_bug_on(sbi, nm_i->nid_cnt[FREE_NID]); in f2fs_destroy_node_manager()
3048 f2fs_bug_on(sbi, nm_i->nid_cnt[PREALLOC_NID]); in f2fs_destroy_node_manager()
3049 f2fs_bug_on(sbi, !list_empty(&nm_i->free_nid_list)); in f2fs_destroy_node_manager()
3067 f2fs_bug_on(sbi, nm_i->nat_cnt); in f2fs_destroy_node_manager()
3078 f2fs_bug_on(sbi, !list_empty(&setvec[idx]->entry_list)); in f2fs_destroy_node_manager()
3100 sbi->nm_info = NULL; in f2fs_destroy_node_manager()