Lines Matching refs:dn
686 pgoff_t f2fs_get_next_page_offset(struct dnode_of_data *dn, pgoff_t pgofs) in f2fs_get_next_page_offset() argument
688 const long direct_index = ADDRS_PER_INODE(dn->inode); in f2fs_get_next_page_offset()
689 const long direct_blks = ADDRS_PER_BLOCK(dn->inode); in f2fs_get_next_page_offset()
690 const long indirect_blks = ADDRS_PER_BLOCK(dn->inode) * NIDS_PER_BLOCK; in f2fs_get_next_page_offset()
691 unsigned int skipped_unit = ADDRS_PER_BLOCK(dn->inode); in f2fs_get_next_page_offset()
692 int cur_level = dn->cur_level; in f2fs_get_next_page_offset()
693 int max_level = dn->max_level; in f2fs_get_next_page_offset()
696 if (!dn->max_level) in f2fs_get_next_page_offset()
702 switch (dn->max_level) { in f2fs_get_next_page_offset()
713 f2fs_bug_on(F2FS_I_SB(dn->inode), 1); in f2fs_get_next_page_offset()
804 int f2fs_get_dnode_of_data(struct dnode_of_data *dn, pgoff_t index, int mode) in f2fs_get_dnode_of_data() argument
806 struct f2fs_sb_info *sbi = F2FS_I_SB(dn->inode); in f2fs_get_dnode_of_data()
815 level = get_node_path(dn->inode, index, offset, noffset); in f2fs_get_dnode_of_data()
819 nids[0] = dn->inode->i_ino; in f2fs_get_dnode_of_data()
821 if (!dn->inode_folio) { in f2fs_get_dnode_of_data()
826 nfolio[0] = dn->inode_folio; in f2fs_get_dnode_of_data()
830 if (f2fs_has_inline_data(dn->inode) && index) { in f2fs_get_dnode_of_data()
839 dn->inode_folio = nfolio[0]; in f2fs_get_dnode_of_data()
840 dn->inode_folio_locked = true; in f2fs_get_dnode_of_data()
846 if (nids[i] && nids[i] == dn->inode->i_ino) { in f2fs_get_dnode_of_data()
851 dn->inode->i_ino, nids[i], level, offset[level]); in f2fs_get_dnode_of_data()
863 dn->nid = nids[i]; in f2fs_get_dnode_of_data()
864 nfolio[i] = f2fs_new_node_folio(dn, noffset[i]); in f2fs_get_dnode_of_data()
883 dn->inode_folio_locked = false; in f2fs_get_dnode_of_data()
903 dn->nid = nids[level]; in f2fs_get_dnode_of_data()
904 dn->ofs_in_node = offset[level]; in f2fs_get_dnode_of_data()
905 dn->node_folio = nfolio[level]; in f2fs_get_dnode_of_data()
906 dn->data_blkaddr = f2fs_data_blkaddr(dn); in f2fs_get_dnode_of_data()
908 if (is_inode_flag_set(dn->inode, FI_COMPRESSED_FILE) && in f2fs_get_dnode_of_data()
910 unsigned int cluster_size = F2FS_I(dn->inode)->i_cluster_size; in f2fs_get_dnode_of_data()
911 unsigned int ofs_in_node = dn->ofs_in_node; in f2fs_get_dnode_of_data()
922 c_len = f2fs_cluster_blocks_are_contiguous(dn, ofs_in_node); in f2fs_get_dnode_of_data()
926 blkaddr = data_blkaddr(dn->inode, dn->node_folio, ofs_in_node); in f2fs_get_dnode_of_data()
928 blkaddr = data_blkaddr(dn->inode, dn->node_folio, in f2fs_get_dnode_of_data()
931 f2fs_update_read_extent_tree_range_compressed(dn->inode, in f2fs_get_dnode_of_data()
942 dn->inode_folio = NULL; in f2fs_get_dnode_of_data()
943 dn->node_folio = NULL; in f2fs_get_dnode_of_data()
945 dn->cur_level = i; in f2fs_get_dnode_of_data()
946 dn->max_level = level; in f2fs_get_dnode_of_data()
947 dn->ofs_in_node = offset[level]; in f2fs_get_dnode_of_data()
952 static int truncate_node(struct dnode_of_data *dn) in truncate_node() argument
954 struct f2fs_sb_info *sbi = F2FS_I_SB(dn->inode); in truncate_node()
959 err = f2fs_get_node_info(sbi, dn->nid, &ni, false); in truncate_node()
975 dec_valid_node_count(sbi, dn->inode, dn->nid == dn->inode->i_ino); in truncate_node()
978 if (dn->nid == dn->inode->i_ino) { in truncate_node()
979 f2fs_remove_orphan_inode(sbi, dn->nid); in truncate_node()
981 f2fs_inode_synced(dn->inode); in truncate_node()
984 clear_node_folio_dirty(dn->node_folio); in truncate_node()
987 index = dn->node_folio->index; in truncate_node()
988 f2fs_folio_put(dn->node_folio, true); in truncate_node()
993 dn->node_folio = NULL; in truncate_node()
994 trace_f2fs_truncate_node(dn->inode, dn->nid, ni.blk_addr); in truncate_node()
999 static int truncate_dnode(struct dnode_of_data *dn) in truncate_dnode() argument
1001 struct f2fs_sb_info *sbi = F2FS_I_SB(dn->inode); in truncate_dnode()
1005 if (dn->nid == 0) in truncate_dnode()
1009 folio = f2fs_get_node_folio(sbi, dn->nid, NODE_TYPE_NON_INODE); in truncate_dnode()
1015 if (IS_INODE(folio) || ino_of_node(folio) != dn->inode->i_ino) { in truncate_dnode()
1017 dn->inode->i_ino, dn->nid, ino_of_node(folio)); in truncate_dnode()
1025 dn->node_folio = folio; in truncate_dnode()
1026 dn->ofs_in_node = 0; in truncate_dnode()
1027 f2fs_truncate_data_blocks_range(dn, ADDRS_PER_BLOCK(dn->inode)); in truncate_dnode()
1028 err = truncate_node(dn); in truncate_dnode()
1037 static int truncate_nodes(struct dnode_of_data *dn, unsigned int nofs, in truncate_nodes() argument
1040 struct dnode_of_data rdn = *dn; in truncate_nodes()
1048 if (dn->nid == 0) in truncate_nodes()
1051 trace_f2fs_truncate_nodes_enter(dn->inode, dn->nid, dn->data_blkaddr); in truncate_nodes()
1053 folio = f2fs_get_node_folio(F2FS_I_SB(dn->inode), dn->nid, in truncate_nodes()
1056 trace_f2fs_truncate_nodes_exit(dn->inode, PTR_ERR(folio)); in truncate_nodes()
1073 dn->node_changed = true; in truncate_nodes()
1087 dn->node_changed = true; in truncate_nodes()
1098 dn->node_folio = folio; in truncate_nodes()
1099 ret = truncate_node(dn); in truncate_nodes()
1106 trace_f2fs_truncate_nodes_exit(dn->inode, freed); in truncate_nodes()
1111 trace_f2fs_truncate_nodes_exit(dn->inode, ret); in truncate_nodes()
1115 static int truncate_partial_nodes(struct dnode_of_data *dn, in truncate_partial_nodes() argument
1125 nid[0] = get_nid(dn->inode_folio, offset[0], true); in truncate_partial_nodes()
1132 folios[i] = f2fs_get_node_folio(F2FS_I_SB(dn->inode), nid[i], in truncate_partial_nodes()
1149 dn->nid = child_nid; in truncate_partial_nodes()
1150 err = truncate_dnode(dn); in truncate_partial_nodes()
1154 dn->node_changed = true; in truncate_partial_nodes()
1158 dn->node_folio = folios[idx]; in truncate_partial_nodes()
1159 dn->nid = nid[idx]; in truncate_partial_nodes()
1160 err = truncate_node(dn); in truncate_partial_nodes()
1173 trace_f2fs_truncate_partial_nodes(dn->inode, nid, depth, err); in truncate_partial_nodes()
1188 struct dnode_of_data dn; in f2fs_truncate_inode_blocks() local
1212 set_new_dnode(&dn, inode, folio, NULL, 0); in f2fs_truncate_inode_blocks()
1225 err = truncate_partial_nodes(&dn, ri, offset, level); in f2fs_truncate_inode_blocks()
1234 err = truncate_partial_nodes(&dn, ri, offset, level); in f2fs_truncate_inode_blocks()
1244 dn.nid = get_nid(folio, offset[0], true); in f2fs_truncate_inode_blocks()
1248 err = truncate_dnode(&dn); in f2fs_truncate_inode_blocks()
1253 err = truncate_nodes(&dn, nofs, offset[1], 2); in f2fs_truncate_inode_blocks()
1257 err = truncate_nodes(&dn, nofs, offset[1], 3); in f2fs_truncate_inode_blocks()
1270 inode->i_ino, dn.nid, offset[0], in f2fs_truncate_inode_blocks()
1297 struct dnode_of_data dn; in f2fs_truncate_xattr_node() local
1308 set_new_dnode(&dn, inode, NULL, nfolio, nid); in f2fs_truncate_xattr_node()
1309 err = truncate_node(&dn); in f2fs_truncate_xattr_node()
1326 struct dnode_of_data dn; in f2fs_remove_inode_page() local
1329 set_new_dnode(&dn, inode, NULL, NULL, inode->i_ino); in f2fs_remove_inode_page()
1330 err = f2fs_get_dnode_of_data(&dn, 0, LOOKUP_NODE); in f2fs_remove_inode_page()
1336 f2fs_put_dnode(&dn); in f2fs_remove_inode_page()
1344 f2fs_truncate_data_blocks_range(&dn, 1); in f2fs_remove_inode_page()
1348 f2fs_put_dnode(&dn); in f2fs_remove_inode_page()
1360 err = truncate_node(&dn); in f2fs_remove_inode_page()
1362 f2fs_put_dnode(&dn); in f2fs_remove_inode_page()
1370 struct dnode_of_data dn; in f2fs_new_inode_folio() local
1373 set_new_dnode(&dn, inode, NULL, NULL, inode->i_ino); in f2fs_new_inode_folio()
1376 return f2fs_new_node_folio(&dn, 0); in f2fs_new_inode_folio()
1379 struct folio *f2fs_new_node_folio(struct dnode_of_data *dn, unsigned int ofs) in f2fs_new_node_folio() argument
1381 struct f2fs_sb_info *sbi = F2FS_I_SB(dn->inode); in f2fs_new_node_folio()
1386 if (unlikely(is_inode_flag_set(dn->inode, FI_NO_ALLOC))) in f2fs_new_node_folio()
1389 folio = f2fs_grab_cache_folio(NODE_MAPPING(sbi), dn->nid, false); in f2fs_new_node_folio()
1393 if (unlikely((err = inc_valid_node_count(sbi, dn->inode, !ofs)))) in f2fs_new_node_folio()
1397 err = f2fs_get_node_info(sbi, dn->nid, &new_ni, false); in f2fs_new_node_folio()
1399 dec_valid_node_count(sbi, dn->inode, !ofs); in f2fs_new_node_folio()
1404 dec_valid_node_count(sbi, dn->inode, !ofs); in f2fs_new_node_folio()
1415 new_ni.nid = dn->nid; in f2fs_new_node_folio()
1416 new_ni.ino = dn->inode->i_ino; in f2fs_new_node_folio()
1423 fill_node_footer(folio, dn->nid, dn->inode->i_ino, ofs, true); in f2fs_new_node_folio()
1424 set_cold_node(folio, S_ISDIR(dn->inode->i_mode)); in f2fs_new_node_folio()
1428 dn->node_changed = true; in f2fs_new_node_folio()
1431 f2fs_i_xnid_write(dn->inode, dn->nid); in f2fs_new_node_folio()
2848 struct dnode_of_data dn; in f2fs_recover_xattr_data() local
2870 set_new_dnode(&dn, inode, NULL, NULL, new_xnid); in f2fs_recover_xattr_data()
2871 xfolio = f2fs_new_node_folio(&dn, XATTR_NODE_OFFSET); in f2fs_recover_xattr_data()