Lines Matching refs:sbi
31 bool available_free_memory(struct f2fs_sb_info *sbi, int type) in available_free_memory() argument
33 struct f2fs_nm_info *nm_i = NM_I(sbi); in available_free_memory()
56 if (sbi->sb->s_bdi->dirty_exceeded) in available_free_memory()
58 mem_size = get_pages(sbi, F2FS_DIRTY_DENTS); in available_free_memory()
64 mem_size += (sbi->im[i].ino_num * in available_free_memory()
68 mem_size = (sbi->total_ext_tree * sizeof(struct extent_tree) + in available_free_memory()
69 atomic_read(&sbi->total_ext_node) * in available_free_memory()
73 if (sbi->sb->s_bdi->dirty_exceeded) in available_free_memory()
97 static struct page *get_current_nat_page(struct f2fs_sb_info *sbi, nid_t nid) in get_current_nat_page() argument
99 pgoff_t index = current_nat_addr(sbi, nid); in get_current_nat_page()
100 return get_meta_page(sbi, index); in get_current_nat_page()
103 static struct page *get_next_nat_page(struct f2fs_sb_info *sbi, nid_t nid) in get_next_nat_page() argument
111 struct f2fs_nm_info *nm_i = NM_I(sbi); in get_next_nat_page()
113 src_off = current_nat_addr(sbi, nid); in get_next_nat_page()
114 dst_off = next_nat_addr(sbi, src_off); in get_next_nat_page()
117 src_page = get_meta_page(sbi, src_off); in get_next_nat_page()
118 dst_page = grab_meta_page(sbi, dst_off); in get_next_nat_page()
119 f2fs_bug_on(sbi, PageDirty(src_page)); in get_next_nat_page()
198 bool is_checkpointed_node(struct f2fs_sb_info *sbi, nid_t nid) in is_checkpointed_node() argument
200 struct f2fs_nm_info *nm_i = NM_I(sbi); in is_checkpointed_node()
212 bool has_fsynced_inode(struct f2fs_sb_info *sbi, nid_t ino) in has_fsynced_inode() argument
214 struct f2fs_nm_info *nm_i = NM_I(sbi); in has_fsynced_inode()
226 bool need_inode_block_update(struct f2fs_sb_info *sbi, nid_t ino) in need_inode_block_update() argument
228 struct f2fs_nm_info *nm_i = NM_I(sbi); in need_inode_block_update()
270 static void set_node_addr(struct f2fs_sb_info *sbi, struct node_info *ni, in set_node_addr() argument
273 struct f2fs_nm_info *nm_i = NM_I(sbi); in set_node_addr()
281 f2fs_bug_on(sbi, ni->blk_addr == NEW_ADDR); in set_node_addr()
289 f2fs_bug_on(sbi, ni->blk_addr != NULL_ADDR); in set_node_addr()
293 f2fs_bug_on(sbi, nat_get_blkaddr(e) != ni->blk_addr); in set_node_addr()
294 f2fs_bug_on(sbi, nat_get_blkaddr(e) == NULL_ADDR && in set_node_addr()
296 f2fs_bug_on(sbi, nat_get_blkaddr(e) == NEW_ADDR && in set_node_addr()
298 f2fs_bug_on(sbi, nat_get_blkaddr(e) != NEW_ADDR && in set_node_addr()
324 int try_to_free_nats(struct f2fs_sb_info *sbi, int nr_shrink) in try_to_free_nats() argument
326 struct f2fs_nm_info *nm_i = NM_I(sbi); in try_to_free_nats()
328 if (available_free_memory(sbi, NAT_ENTRIES)) in try_to_free_nats()
346 void get_node_info(struct f2fs_sb_info *sbi, nid_t nid, struct node_info *ni) in get_node_info() argument
348 struct f2fs_nm_info *nm_i = NM_I(sbi); in get_node_info()
349 struct curseg_info *curseg = CURSEG_I(sbi, CURSEG_HOT_DATA); in get_node_info()
386 page = get_current_nat_page(sbi, start_nid); in get_node_info()
393 cache_nat_entry(NM_I(sbi), nid, &ne); in get_node_info()
482 struct f2fs_sb_info *sbi = F2FS_I_SB(dn->inode); in get_dnode_of_data() local
497 npage[0] = get_node_page(sbi, nids[0]); in get_dnode_of_data()
521 if (!alloc_nid(sbi, &(nids[i]))) { in get_dnode_of_data()
529 alloc_nid_failed(sbi, nids[i]); in get_dnode_of_data()
535 alloc_nid_done(sbi, nids[i]); in get_dnode_of_data()
553 npage[i] = get_node_page(sbi, nids[i]); in get_dnode_of_data()
583 struct f2fs_sb_info *sbi = F2FS_I_SB(dn->inode); in truncate_node() local
586 get_node_info(sbi, dn->nid, &ni); in truncate_node()
588 f2fs_bug_on(sbi, ni.blk_addr != NULL_ADDR); in truncate_node()
591 f2fs_bug_on(sbi, ni.blk_addr == NULL_ADDR); in truncate_node()
594 invalidate_blocks(sbi, ni.blk_addr); in truncate_node()
595 dec_valid_node_count(sbi, dn->inode); in truncate_node()
596 set_node_addr(sbi, &ni, NULL_ADDR, false); in truncate_node()
599 remove_orphan_inode(sbi, dn->nid); in truncate_node()
600 dec_valid_inode_count(sbi); in truncate_node()
606 set_sbi_flag(sbi, SBI_IS_DIRTY); in truncate_node()
610 invalidate_mapping_pages(NODE_MAPPING(sbi), in truncate_node()
772 struct f2fs_sb_info *sbi = F2FS_I_SB(inode); in truncate_inode_blocks() local
784 page = get_node_page(sbi, inode->i_ino); in truncate_inode_blocks()
847 if (unlikely(page->mapping != NODE_MAPPING(sbi))) { in truncate_inode_blocks()
868 struct f2fs_sb_info *sbi = F2FS_I_SB(inode); in truncate_xattr_node() local
876 npage = get_node_page(sbi, nid); in truncate_xattr_node()
883 F2FS_I(inode)->xattr_ver = cur_cp_version(F2FS_CKPT(sbi)); in truncate_xattr_node()
937 struct f2fs_sb_info *sbi = F2FS_I_SB(dn->inode); in new_node_page() local
945 page = grab_cache_page(NODE_MAPPING(sbi), dn->nid); in new_node_page()
949 if (unlikely(!inc_valid_node_count(sbi, dn->inode))) { in new_node_page()
954 get_node_info(sbi, dn->nid, &old_ni); in new_node_page()
957 f2fs_bug_on(sbi, old_ni.blk_addr != NULL_ADDR); in new_node_page()
960 set_node_addr(sbi, &new_ni, NEW_ADDR, false); in new_node_page()
977 inc_valid_inode_count(sbi); in new_node_page()
995 struct f2fs_sb_info *sbi = F2FS_P_SB(page); in read_node_page() local
1002 get_node_info(sbi, page->index, &ni); in read_node_page()
1014 return f2fs_submit_page_bio(sbi, page, &fio); in read_node_page()
1020 void ra_node_page(struct f2fs_sb_info *sbi, nid_t nid) in ra_node_page() argument
1025 apage = find_get_page(NODE_MAPPING(sbi), nid); in ra_node_page()
1032 apage = grab_cache_page(NODE_MAPPING(sbi), nid); in ra_node_page()
1043 struct page *get_node_page(struct f2fs_sb_info *sbi, pgoff_t nid) in get_node_page() argument
1048 page = grab_cache_page(NODE_MAPPING(sbi), nid); in get_node_page()
1063 if (unlikely(page->mapping != NODE_MAPPING(sbi))) { in get_node_page()
1076 struct f2fs_sb_info *sbi = F2FS_P_SB(parent); in get_node_page_ra() local
1087 page = grab_cache_page(NODE_MAPPING(sbi), nid); in get_node_page_ra()
1106 ra_node_page(sbi, nid); in get_node_page_ra()
1112 if (unlikely(page->mapping != NODE_MAPPING(sbi))) { in get_node_page_ra()
1139 int sync_node_pages(struct f2fs_sb_info *sbi, nid_t ino, in sync_node_pages() argument
1155 nr_pages = pagevec_lookup_tag(&pvec, NODE_MAPPING(sbi), &index, in sync_node_pages()
1188 if (unlikely(page->mapping != NODE_MAPPING(sbi))) { in sync_node_pages()
1208 if (!is_checkpointed_node(sbi, ino) && in sync_node_pages()
1209 !has_fsynced_inode(sbi, ino)) in sync_node_pages()
1220 if (NODE_MAPPING(sbi)->a_ops->writepage(page, wbc)) in sync_node_pages()
1243 f2fs_submit_merged_bio(sbi, NODE, WRITE); in sync_node_pages()
1247 int wait_on_node_pages_writeback(struct f2fs_sb_info *sbi, nid_t ino) in wait_on_node_pages_writeback() argument
1257 nr_pages = pagevec_lookup_tag(&pvec, NODE_MAPPING(sbi), &index, in wait_on_node_pages_writeback()
1280 if (unlikely(test_and_clear_bit(AS_ENOSPC, &NODE_MAPPING(sbi)->flags))) in wait_on_node_pages_writeback()
1282 if (unlikely(test_and_clear_bit(AS_EIO, &NODE_MAPPING(sbi)->flags))) in wait_on_node_pages_writeback()
1292 struct f2fs_sb_info *sbi = F2FS_P_SB(page); in f2fs_write_node_page() local
1302 if (unlikely(is_sbi_flag_set(sbi, SBI_POR_DOING))) in f2fs_write_node_page()
1304 if (unlikely(f2fs_cp_error(sbi))) in f2fs_write_node_page()
1311 f2fs_bug_on(sbi, page->index != nid); in f2fs_write_node_page()
1313 get_node_info(sbi, nid, &ni); in f2fs_write_node_page()
1318 dec_page_count(sbi, F2FS_DIRTY_NODES); in f2fs_write_node_page()
1324 if (!down_read_trylock(&sbi->node_write)) in f2fs_write_node_page()
1327 down_read(&sbi->node_write); in f2fs_write_node_page()
1332 write_node_page(sbi, page, nid, &fio); in f2fs_write_node_page()
1333 set_node_addr(sbi, &ni, fio.blk_addr, is_fsync_dnode(page)); in f2fs_write_node_page()
1334 dec_page_count(sbi, F2FS_DIRTY_NODES); in f2fs_write_node_page()
1335 up_read(&sbi->node_write); in f2fs_write_node_page()
1339 f2fs_submit_merged_bio(sbi, NODE, WRITE); in f2fs_write_node_page()
1351 struct f2fs_sb_info *sbi = F2FS_M_SB(mapping); in f2fs_write_node_pages() local
1357 f2fs_balance_fs_bg(sbi); in f2fs_write_node_pages()
1360 if (get_pages(sbi, F2FS_DIRTY_NODES) < nr_pages_to_skip(sbi, NODE)) in f2fs_write_node_pages()
1363 diff = nr_pages_to_write(sbi, NODE, wbc); in f2fs_write_node_pages()
1365 sync_node_pages(sbi, 0, wbc); in f2fs_write_node_pages()
1370 wbc->pages_skipped += get_pages(sbi, F2FS_DIRTY_NODES); in f2fs_write_node_pages()
1413 static int add_free_nid(struct f2fs_sb_info *sbi, nid_t nid, bool build) in add_free_nid() argument
1415 struct f2fs_nm_info *nm_i = NM_I(sbi); in add_free_nid()
1420 if (!available_free_memory(sbi, FREE_NIDS)) in add_free_nid()
1481 static void scan_nat_page(struct f2fs_sb_info *sbi, in scan_nat_page() argument
1484 struct f2fs_nm_info *nm_i = NM_I(sbi); in scan_nat_page()
1497 f2fs_bug_on(sbi, blk_addr == NEW_ADDR); in scan_nat_page()
1499 if (add_free_nid(sbi, start_nid, true) < 0) in scan_nat_page()
1505 static void build_free_nids(struct f2fs_sb_info *sbi) in build_free_nids() argument
1507 struct f2fs_nm_info *nm_i = NM_I(sbi); in build_free_nids()
1508 struct curseg_info *curseg = CURSEG_I(sbi, CURSEG_HOT_DATA); in build_free_nids()
1518 ra_meta_pages(sbi, NAT_BLOCK_OFFSET(nid), FREE_NID_PAGES, META_NAT); in build_free_nids()
1521 struct page *page = get_current_nat_page(sbi, nid); in build_free_nids()
1523 scan_nat_page(sbi, page, nid); in build_free_nids()
1543 add_free_nid(sbi, nid, true); in build_free_nids()
1555 bool alloc_nid(struct f2fs_sb_info *sbi, nid_t *nid) in alloc_nid() argument
1557 struct f2fs_nm_info *nm_i = NM_I(sbi); in alloc_nid()
1560 if (unlikely(sbi->total_valid_node_count + 1 > nm_i->available_nids)) in alloc_nid()
1567 f2fs_bug_on(sbi, list_empty(&nm_i->free_nid_list)); in alloc_nid()
1572 f2fs_bug_on(sbi, i->state != NID_NEW); in alloc_nid()
1583 build_free_nids(sbi); in alloc_nid()
1591 void alloc_nid_done(struct f2fs_sb_info *sbi, nid_t nid) in alloc_nid_done() argument
1593 struct f2fs_nm_info *nm_i = NM_I(sbi); in alloc_nid_done()
1598 f2fs_bug_on(sbi, !i || i->state != NID_ALLOC); in alloc_nid_done()
1608 void alloc_nid_failed(struct f2fs_sb_info *sbi, nid_t nid) in alloc_nid_failed() argument
1610 struct f2fs_nm_info *nm_i = NM_I(sbi); in alloc_nid_failed()
1619 f2fs_bug_on(sbi, !i || i->state != NID_ALLOC); in alloc_nid_failed()
1620 if (!available_free_memory(sbi, FREE_NIDS)) { in alloc_nid_failed()
1662 struct f2fs_sb_info *sbi = F2FS_I_SB(inode); in recover_xattr_data() local
1672 get_node_info(sbi, prev_xnid, &ni); in recover_xattr_data()
1673 f2fs_bug_on(sbi, ni.blk_addr == NULL_ADDR); in recover_xattr_data()
1674 invalidate_blocks(sbi, ni.blk_addr); in recover_xattr_data()
1675 dec_valid_node_count(sbi, inode); in recover_xattr_data()
1676 set_node_addr(sbi, &ni, NULL_ADDR, false); in recover_xattr_data()
1680 if (unlikely(!inc_valid_node_count(sbi, inode))) in recover_xattr_data()
1681 f2fs_bug_on(sbi, 1); in recover_xattr_data()
1683 remove_free_nid(NM_I(sbi), new_xnid); in recover_xattr_data()
1684 get_node_info(sbi, new_xnid, &ni); in recover_xattr_data()
1686 set_node_addr(sbi, &ni, NEW_ADDR, false); in recover_xattr_data()
1690 refresh_sit_entry(sbi, NEW_ADDR, blkaddr); in recover_xattr_data()
1691 set_node_addr(sbi, &ni, blkaddr, false); in recover_xattr_data()
1696 int recover_inode_page(struct f2fs_sb_info *sbi, struct page *page) in recover_inode_page() argument
1703 get_node_info(sbi, ino, &old_ni); in recover_inode_page()
1708 ipage = grab_cache_page(NODE_MAPPING(sbi), ino); in recover_inode_page()
1713 remove_free_nid(NM_I(sbi), ino); in recover_inode_page()
1731 if (unlikely(!inc_valid_node_count(sbi, NULL))) in recover_inode_page()
1733 set_node_addr(sbi, &new_ni, NEW_ADDR, false); in recover_inode_page()
1734 inc_valid_inode_count(sbi); in recover_inode_page()
1740 int restore_node_summary(struct f2fs_sb_info *sbi, in restore_node_summary() argument
1746 int bio_blocks = MAX_BIO_BLOCKS(sbi); in restore_node_summary()
1750 last_offset = sbi->blocks_per_seg; in restore_node_summary()
1751 addr = START_BLOCK(sbi, segno); in restore_node_summary()
1758 ra_meta_pages(sbi, addr, nrpages, META_POR); in restore_node_summary()
1761 struct page *page = get_meta_page(sbi, idx); in restore_node_summary()
1771 invalidate_mapping_pages(META_MAPPING(sbi), addr, in restore_node_summary()
1777 static void remove_nats_in_journal(struct f2fs_sb_info *sbi) in remove_nats_in_journal() argument
1779 struct f2fs_nm_info *nm_i = NM_I(sbi); in remove_nats_in_journal()
1780 struct curseg_info *curseg = CURSEG_I(sbi, CURSEG_HOT_DATA); in remove_nats_in_journal()
1823 static void __flush_nat_entry_set(struct f2fs_sb_info *sbi, in __flush_nat_entry_set() argument
1826 struct curseg_info *curseg = CURSEG_I(sbi, CURSEG_HOT_DATA); in __flush_nat_entry_set()
1833 struct f2fs_nm_info *nm_i = NM_I(sbi); in __flush_nat_entry_set()
1846 page = get_next_nat_page(sbi, start_nid); in __flush_nat_entry_set()
1848 f2fs_bug_on(sbi, !nat_blk); in __flush_nat_entry_set()
1863 f2fs_bug_on(sbi, offset < 0); in __flush_nat_entry_set()
1871 down_write(&NM_I(sbi)->nat_tree_lock); in __flush_nat_entry_set()
1873 __clear_nat_cache_dirty(NM_I(sbi), ne); in __flush_nat_entry_set()
1874 up_write(&NM_I(sbi)->nat_tree_lock); in __flush_nat_entry_set()
1877 add_free_nid(sbi, nid, false); in __flush_nat_entry_set()
1885 f2fs_bug_on(sbi, set->entry_cnt); in __flush_nat_entry_set()
1888 radix_tree_delete(&NM_I(sbi)->nat_set_root, set->set); in __flush_nat_entry_set()
1896 void flush_nat_entries(struct f2fs_sb_info *sbi) in flush_nat_entries() argument
1898 struct f2fs_nm_info *nm_i = NM_I(sbi); in flush_nat_entries()
1899 struct curseg_info *curseg = CURSEG_I(sbi, CURSEG_HOT_DATA); in flush_nat_entries()
1915 remove_nats_in_journal(sbi); in flush_nat_entries()
1930 __flush_nat_entry_set(sbi, set); in flush_nat_entries()
1932 f2fs_bug_on(sbi, nm_i->dirty_nat_cnt); in flush_nat_entries()
1935 static int init_node_manager(struct f2fs_sb_info *sbi) in init_node_manager() argument
1937 struct f2fs_super_block *sb_raw = F2FS_RAW_SUPER(sbi); in init_node_manager()
1938 struct f2fs_nm_info *nm_i = NM_I(sbi); in init_node_manager()
1966 nm_i->next_scan_nid = le32_to_cpu(sbi->ckpt->next_free_nid); in init_node_manager()
1967 nm_i->bitmap_size = __bitmap_size(sbi, NAT_BITMAP); in init_node_manager()
1968 version_bitmap = __bitmap_ptr(sbi, NAT_BITMAP); in init_node_manager()
1979 int build_node_manager(struct f2fs_sb_info *sbi) in build_node_manager() argument
1983 sbi->nm_info = kzalloc(sizeof(struct f2fs_nm_info), GFP_KERNEL); in build_node_manager()
1984 if (!sbi->nm_info) in build_node_manager()
1987 err = init_node_manager(sbi); in build_node_manager()
1991 build_free_nids(sbi); in build_node_manager()
1995 void destroy_node_manager(struct f2fs_sb_info *sbi) in destroy_node_manager() argument
1997 struct f2fs_nm_info *nm_i = NM_I(sbi); in destroy_node_manager()
2010 f2fs_bug_on(sbi, i->state == NID_ALLOC); in destroy_node_manager()
2017 f2fs_bug_on(sbi, nm_i->fcnt); in destroy_node_manager()
2030 f2fs_bug_on(sbi, nm_i->nat_cnt); in destroy_node_manager()
2041 f2fs_bug_on(sbi, !list_empty(&setvec[idx]->entry_list)); in destroy_node_manager()
2049 sbi->nm_info = NULL; in destroy_node_manager()