Lines Matching refs:dn

645 pgoff_t f2fs_get_next_page_offset(struct dnode_of_data *dn, pgoff_t pgofs)
647 const long direct_index = ADDRS_PER_INODE(dn->inode);
648 const long direct_blks = ADDRS_PER_BLOCK(dn->inode);
649 const long indirect_blks = ADDRS_PER_BLOCK(dn->inode) * NIDS_PER_BLOCK;
650 unsigned int skipped_unit = ADDRS_PER_BLOCK(dn->inode);
651 int cur_level = dn->cur_level;
652 int max_level = dn->max_level;
655 if (!dn->max_level)
661 switch (dn->max_level) {
672 f2fs_bug_on(F2FS_I_SB(dn->inode), 1);
757 * Caller should call f2fs_put_dnode(dn).
761 int f2fs_get_dnode_of_data(struct dnode_of_data *dn, pgoff_t index, int mode)
763 struct f2fs_sb_info *sbi = F2FS_I_SB(dn->inode);
772 level = get_node_path(dn->inode, index, offset, noffset);
776 nids[0] = dn->inode->i_ino;
777 npage[0] = dn->inode_page;
786 if (f2fs_has_inline_data(dn->inode) && index) {
795 dn->inode_page = npage[0];
796 dn->inode_page_locked = true;
809 dn->nid = nids[i];
810 npage[i] = f2fs_new_node_page(dn, noffset[i]);
829 dn->inode_page_locked = false;
848 dn->nid = nids[level];
849 dn->ofs_in_node = offset[level];
850 dn->node_page = npage[level];
851 dn->data_blkaddr = f2fs_data_blkaddr(dn);
853 if (is_inode_flag_set(dn->inode, FI_COMPRESSED_FILE) &&
855 unsigned int cluster_size = F2FS_I(dn->inode)->i_cluster_size;
856 unsigned int ofs_in_node = dn->ofs_in_node;
867 c_len = f2fs_cluster_blocks_are_contiguous(dn, ofs_in_node);
871 blkaddr = data_blkaddr(dn->inode, dn->node_page, ofs_in_node);
873 blkaddr = data_blkaddr(dn->inode, dn->node_page,
876 f2fs_update_read_extent_tree_range_compressed(dn->inode,
887 dn->inode_page = NULL;
888 dn->node_page = NULL;
890 dn->cur_level = i;
891 dn->max_level = level;
892 dn->ofs_in_node = offset[level];
897 static int truncate_node(struct dnode_of_data *dn)
899 struct f2fs_sb_info *sbi = F2FS_I_SB(dn->inode);
904 err = f2fs_get_node_info(sbi, dn->nid, &ni, false);
910 dec_valid_node_count(sbi, dn->inode, dn->nid == dn->inode->i_ino);
913 if (dn->nid == dn->inode->i_ino) {
914 f2fs_remove_orphan_inode(sbi, dn->nid);
916 f2fs_inode_synced(dn->inode);
919 clear_node_page_dirty(dn->node_page);
922 index = dn->node_page->index;
923 f2fs_put_page(dn->node_page, 1);
928 dn->node_page = NULL;
929 trace_f2fs_truncate_node(dn->inode, dn->nid, ni.blk_addr);
934 static int truncate_dnode(struct dnode_of_data *dn)
936 struct f2fs_sb_info *sbi = F2FS_I_SB(dn->inode);
940 if (dn->nid == 0)
944 page = f2fs_get_node_page(sbi, dn->nid);
950 if (IS_INODE(page) || ino_of_node(page) != dn->inode->i_ino) {
952 dn->inode->i_ino, dn->nid, ino_of_node(page));
960 dn->node_page = page;
961 dn->ofs_in_node = 0;
962 f2fs_truncate_data_blocks_range(dn, ADDRS_PER_BLOCK(dn->inode));
963 err = truncate_node(dn);
972 static int truncate_nodes(struct dnode_of_data *dn, unsigned int nofs,
975 struct dnode_of_data rdn = *dn;
983 if (dn->nid == 0)
986 trace_f2fs_truncate_nodes_enter(dn->inode, dn->nid, dn->data_blkaddr);
988 page = f2fs_get_node_page(F2FS_I_SB(dn->inode), dn->nid);
990 trace_f2fs_truncate_nodes_exit(dn->inode, PTR_ERR(page));
1007 dn->node_changed = true;
1021 dn->node_changed = true;
1032 dn->node_page = page;
1033 ret = truncate_node(dn);
1040 trace_f2fs_truncate_nodes_exit(dn->inode, freed);
1045 trace_f2fs_truncate_nodes_exit(dn->inode, ret);
1049 static int truncate_partial_nodes(struct dnode_of_data *dn,
1066 pages[i] = f2fs_get_node_page(F2FS_I_SB(dn->inode), nid[i]);
1082 dn->nid = child_nid;
1083 err = truncate_dnode(dn);
1087 dn->node_changed = true;
1091 dn->node_page = pages[idx];
1092 dn->nid = nid[idx];
1093 err = truncate_node(dn);
1106 trace_f2fs_truncate_partial_nodes(dn->inode, nid, depth, err);
1121 struct dnode_of_data dn;
1138 set_new_dnode(&dn, inode, page, NULL, 0);
1151 err = truncate_partial_nodes(&dn, ri, offset, level);
1160 err = truncate_partial_nodes(&dn, ri, offset, level);
1170 dn.nid = le32_to_cpu(ri->i_nid[offset[0] - NODE_DIR1_BLOCK]);
1174 err = truncate_dnode(&dn);
1179 err = truncate_nodes(&dn, nofs, offset[1], 2);
1183 err = truncate_nodes(&dn, nofs, offset[1], 3);
1196 inode->i_ino, dn.nid, offset[0],
1226 struct dnode_of_data dn;
1237 set_new_dnode(&dn, inode, NULL, npage, nid);
1238 err = truncate_node(&dn);
1255 struct dnode_of_data dn;
1258 set_new_dnode(&dn, inode, NULL, NULL, inode->i_ino);
1259 err = f2fs_get_dnode_of_data(&dn, 0, LOOKUP_NODE);
1265 f2fs_put_dnode(&dn);
1272 f2fs_truncate_data_blocks_range(&dn, 1);
1276 f2fs_put_dnode(&dn);
1288 err = truncate_node(&dn);
1290 f2fs_put_dnode(&dn);
1298 struct dnode_of_data dn;
1301 set_new_dnode(&dn, inode, NULL, NULL, inode->i_ino);
1304 return f2fs_new_node_page(&dn, 0);
1307 struct page *f2fs_new_node_page(struct dnode_of_data *dn, unsigned int ofs)
1309 struct f2fs_sb_info *sbi = F2FS_I_SB(dn->inode);
1314 if (unlikely(is_inode_flag_set(dn->inode, FI_NO_ALLOC)))
1317 page = f2fs_grab_cache_page(NODE_MAPPING(sbi), dn->nid, false);
1321 if (unlikely((err = inc_valid_node_count(sbi, dn->inode, !ofs))))
1325 err = f2fs_get_node_info(sbi, dn->nid, &new_ni, false);
1327 dec_valid_node_count(sbi, dn->inode, !ofs);
1332 dec_valid_node_count(sbi, dn->inode, !ofs);
1338 new_ni.nid = dn->nid;
1339 new_ni.ino = dn->inode->i_ino;
1346 fill_node_footer(page, dn->nid, dn->inode->i_ino, ofs, true);
1347 set_cold_node(page, S_ISDIR(dn->inode->i_mode));
1351 dn->node_changed = true;
1354 f2fs_i_xnid_write(dn->inode, dn->nid);
2739 struct dnode_of_data dn;
2761 set_new_dnode(&dn, inode, NULL, NULL, new_xnid);
2762 xpage = f2fs_new_node_page(&dn, XATTR_NODE_OFFSET);