Lines Matching refs:dn

488 int get_dnode_of_data(struct dnode_of_data *dn, pgoff_t index, int mode)  in get_dnode_of_data()  argument
490 struct f2fs_sb_info *sbi = F2FS_I_SB(dn->inode); in get_dnode_of_data()
499 level = get_node_path(F2FS_I(dn->inode), index, offset, noffset); in get_dnode_of_data()
501 nids[0] = dn->inode->i_ino; in get_dnode_of_data()
502 npage[0] = dn->inode_page; in get_dnode_of_data()
511 if (f2fs_has_inline_data(dn->inode) && index) { in get_dnode_of_data()
520 dn->inode_page = npage[0]; in get_dnode_of_data()
521 dn->inode_page_locked = true; in get_dnode_of_data()
534 dn->nid = nids[i]; in get_dnode_of_data()
535 npage[i] = new_node_page(dn, noffset[i], NULL); in get_dnode_of_data()
554 dn->inode_page_locked = false; in get_dnode_of_data()
573 dn->nid = nids[level]; in get_dnode_of_data()
574 dn->ofs_in_node = offset[level]; in get_dnode_of_data()
575 dn->node_page = npage[level]; in get_dnode_of_data()
576 dn->data_blkaddr = datablock_addr(dn->node_page, dn->ofs_in_node); in get_dnode_of_data()
584 dn->inode_page = NULL; in get_dnode_of_data()
585 dn->node_page = NULL; in get_dnode_of_data()
589 static void truncate_node(struct dnode_of_data *dn) in truncate_node() argument
591 struct f2fs_sb_info *sbi = F2FS_I_SB(dn->inode); in truncate_node()
594 get_node_info(sbi, dn->nid, &ni); in truncate_node()
595 if (dn->inode->i_blocks == 0) { in truncate_node()
603 dec_valid_node_count(sbi, dn->inode); in truncate_node()
606 if (dn->nid == dn->inode->i_ino) { in truncate_node()
607 remove_orphan_inode(sbi, dn->nid); in truncate_node()
610 sync_inode_page(dn); in truncate_node()
613 clear_node_page_dirty(dn->node_page); in truncate_node()
616 f2fs_put_page(dn->node_page, 1); in truncate_node()
619 dn->node_page->index, dn->node_page->index); in truncate_node()
621 dn->node_page = NULL; in truncate_node()
622 trace_f2fs_truncate_node(dn->inode, dn->nid, ni.blk_addr); in truncate_node()
625 static int truncate_dnode(struct dnode_of_data *dn) in truncate_dnode() argument
629 if (dn->nid == 0) in truncate_dnode()
633 page = get_node_page(F2FS_I_SB(dn->inode), dn->nid); in truncate_dnode()
640 dn->node_page = page; in truncate_dnode()
641 dn->ofs_in_node = 0; in truncate_dnode()
642 truncate_data_blocks(dn); in truncate_dnode()
643 truncate_node(dn); in truncate_dnode()
647 static int truncate_nodes(struct dnode_of_data *dn, unsigned int nofs, in truncate_nodes() argument
650 struct dnode_of_data rdn = *dn; in truncate_nodes()
658 if (dn->nid == 0) in truncate_nodes()
661 trace_f2fs_truncate_nodes_enter(dn->inode, dn->nid, dn->data_blkaddr); in truncate_nodes()
663 page = get_node_page(F2FS_I_SB(dn->inode), dn->nid); in truncate_nodes()
665 trace_f2fs_truncate_nodes_exit(dn->inode, PTR_ERR(page)); in truncate_nodes()
703 dn->node_page = page; in truncate_nodes()
704 truncate_node(dn); in truncate_nodes()
709 trace_f2fs_truncate_nodes_exit(dn->inode, freed); in truncate_nodes()
714 trace_f2fs_truncate_nodes_exit(dn->inode, ret); in truncate_nodes()
718 static int truncate_partial_nodes(struct dnode_of_data *dn, in truncate_partial_nodes() argument
735 pages[i] = get_node_page(F2FS_I_SB(dn->inode), nid[i]); in truncate_partial_nodes()
749 dn->nid = child_nid; in truncate_partial_nodes()
750 err = truncate_dnode(dn); in truncate_partial_nodes()
757 dn->node_page = pages[idx]; in truncate_partial_nodes()
758 dn->nid = nid[idx]; in truncate_partial_nodes()
759 truncate_node(dn); in truncate_partial_nodes()
770 trace_f2fs_truncate_partial_nodes(dn->inode, nid, depth, err); in truncate_partial_nodes()
785 struct dnode_of_data dn; in truncate_inode_blocks() local
798 set_new_dnode(&dn, inode, page, NULL, 0); in truncate_inode_blocks()
811 err = truncate_partial_nodes(&dn, ri, offset, level); in truncate_inode_blocks()
820 err = truncate_partial_nodes(&dn, ri, offset, level); in truncate_inode_blocks()
830 dn.nid = le32_to_cpu(ri->i_nid[offset[0] - NODE_DIR1_BLOCK]); in truncate_inode_blocks()
834 err = truncate_dnode(&dn); in truncate_inode_blocks()
839 err = truncate_nodes(&dn, nofs, offset[1], 2); in truncate_inode_blocks()
843 err = truncate_nodes(&dn, nofs, offset[1], 3); in truncate_inode_blocks()
878 struct dnode_of_data dn; in truncate_xattr_node() local
893 set_new_dnode(&dn, inode, page, npage, nid); in truncate_xattr_node()
896 dn.inode_page_locked = true; in truncate_xattr_node()
897 truncate_node(&dn); in truncate_xattr_node()
907 struct dnode_of_data dn; in remove_inode_page() local
910 set_new_dnode(&dn, inode, NULL, NULL, inode->i_ino); in remove_inode_page()
911 err = get_dnode_of_data(&dn, 0, LOOKUP_NODE); in remove_inode_page()
915 err = truncate_xattr_node(inode, dn.inode_page); in remove_inode_page()
917 f2fs_put_dnode(&dn); in remove_inode_page()
924 truncate_data_blocks_range(&dn, 1); in remove_inode_page()
931 truncate_node(&dn); in remove_inode_page()
937 struct dnode_of_data dn; in new_inode_page() local
940 set_new_dnode(&dn, inode, NULL, NULL, inode->i_ino); in new_inode_page()
943 return new_node_page(&dn, 0, NULL); in new_inode_page()
946 struct page *new_node_page(struct dnode_of_data *dn, in new_node_page() argument
949 struct f2fs_sb_info *sbi = F2FS_I_SB(dn->inode); in new_node_page()
954 if (unlikely(is_inode_flag_set(F2FS_I(dn->inode), FI_NO_ALLOC))) in new_node_page()
957 page = grab_cache_page(NODE_MAPPING(sbi), dn->nid); in new_node_page()
961 if (unlikely(!inc_valid_node_count(sbi, dn->inode))) { in new_node_page()
966 get_node_info(sbi, dn->nid, &old_ni); in new_node_page()
971 new_ni.ino = dn->inode->i_ino; in new_node_page()
975 fill_node_footer(page, dn->nid, dn->inode->i_ino, ofs, true); in new_node_page()
976 set_cold_node(dn->inode, page); in new_node_page()
981 F2FS_I(dn->inode)->i_xattr_nid = dn->nid; in new_node_page()
983 dn->node_page = page; in new_node_page()
985 update_inode(dn->inode, ipage); in new_node_page()
987 sync_inode_page(dn); in new_node_page()
1138 void sync_inode_page(struct dnode_of_data *dn) in sync_inode_page() argument
1140 if (IS_INODE(dn->node_page) || dn->inode_page == dn->node_page) { in sync_inode_page()
1141 update_inode(dn->inode, dn->node_page); in sync_inode_page()
1142 } else if (dn->inode_page) { in sync_inode_page()
1143 if (!dn->inode_page_locked) in sync_inode_page()
1144 lock_page(dn->inode_page); in sync_inode_page()
1145 update_inode(dn->inode, dn->inode_page); in sync_inode_page()
1146 if (!dn->inode_page_locked) in sync_inode_page()
1147 unlock_page(dn->inode_page); in sync_inode_page()
1149 update_inode_page(dn->inode); in sync_inode_page()