Lines Matching refs:dn
593 static void __set_data_blkaddr(struct dnode_of_data *dn) in __set_data_blkaddr() argument
595 struct f2fs_node *rn = F2FS_NODE(dn->node_page); in __set_data_blkaddr()
599 if (IS_INODE(dn->node_page) && f2fs_has_extra_attr(dn->inode)) in __set_data_blkaddr()
600 base = get_extra_isize(dn->inode); in __set_data_blkaddr()
604 addr_array[base + dn->ofs_in_node] = cpu_to_le32(dn->data_blkaddr); in __set_data_blkaddr()
613 void f2fs_set_data_blkaddr(struct dnode_of_data *dn) in f2fs_set_data_blkaddr() argument
615 f2fs_wait_on_page_writeback(dn->node_page, NODE, true); in f2fs_set_data_blkaddr()
616 __set_data_blkaddr(dn); in f2fs_set_data_blkaddr()
617 if (set_page_dirty(dn->node_page)) in f2fs_set_data_blkaddr()
618 dn->node_changed = true; in f2fs_set_data_blkaddr()
621 void f2fs_update_data_blkaddr(struct dnode_of_data *dn, block_t blkaddr) in f2fs_update_data_blkaddr() argument
623 dn->data_blkaddr = blkaddr; in f2fs_update_data_blkaddr()
624 f2fs_set_data_blkaddr(dn); in f2fs_update_data_blkaddr()
625 f2fs_update_extent_cache(dn); in f2fs_update_data_blkaddr()
629 int f2fs_reserve_new_blocks(struct dnode_of_data *dn, blkcnt_t count) in f2fs_reserve_new_blocks() argument
631 struct f2fs_sb_info *sbi = F2FS_I_SB(dn->inode); in f2fs_reserve_new_blocks()
637 if (unlikely(is_inode_flag_set(dn->inode, FI_NO_ALLOC))) in f2fs_reserve_new_blocks()
639 if (unlikely((err = inc_valid_block_count(sbi, dn->inode, &count)))) in f2fs_reserve_new_blocks()
642 trace_f2fs_reserve_new_blocks(dn->inode, dn->nid, in f2fs_reserve_new_blocks()
643 dn->ofs_in_node, count); in f2fs_reserve_new_blocks()
645 f2fs_wait_on_page_writeback(dn->node_page, NODE, true); in f2fs_reserve_new_blocks()
647 for (; count > 0; dn->ofs_in_node++) { in f2fs_reserve_new_blocks()
648 block_t blkaddr = datablock_addr(dn->inode, in f2fs_reserve_new_blocks()
649 dn->node_page, dn->ofs_in_node); in f2fs_reserve_new_blocks()
651 dn->data_blkaddr = NEW_ADDR; in f2fs_reserve_new_blocks()
652 __set_data_blkaddr(dn); in f2fs_reserve_new_blocks()
657 if (set_page_dirty(dn->node_page)) in f2fs_reserve_new_blocks()
658 dn->node_changed = true; in f2fs_reserve_new_blocks()
663 int f2fs_reserve_new_block(struct dnode_of_data *dn) in f2fs_reserve_new_block() argument
665 unsigned int ofs_in_node = dn->ofs_in_node; in f2fs_reserve_new_block()
668 ret = f2fs_reserve_new_blocks(dn, 1); in f2fs_reserve_new_block()
669 dn->ofs_in_node = ofs_in_node; in f2fs_reserve_new_block()
673 int f2fs_reserve_block(struct dnode_of_data *dn, pgoff_t index) in f2fs_reserve_block() argument
675 bool need_put = dn->inode_page ? false : true; in f2fs_reserve_block()
678 err = f2fs_get_dnode_of_data(dn, index, ALLOC_NODE); in f2fs_reserve_block()
682 if (dn->data_blkaddr == NULL_ADDR) in f2fs_reserve_block()
683 err = f2fs_reserve_new_block(dn); in f2fs_reserve_block()
685 f2fs_put_dnode(dn); in f2fs_reserve_block()
689 int f2fs_get_block(struct dnode_of_data *dn, pgoff_t index) in f2fs_get_block() argument
692 struct inode *inode = dn->inode; in f2fs_get_block()
695 dn->data_blkaddr = ei.blk + index - ei.fofs; in f2fs_get_block()
699 return f2fs_reserve_block(dn, index); in f2fs_get_block()
706 struct dnode_of_data dn; in f2fs_get_read_data_page() local
716 dn.data_blkaddr = ei.blk + index - ei.fofs; in f2fs_get_read_data_page()
720 set_new_dnode(&dn, inode, NULL, NULL, 0); in f2fs_get_read_data_page()
721 err = f2fs_get_dnode_of_data(&dn, index, LOOKUP_NODE); in f2fs_get_read_data_page()
724 f2fs_put_dnode(&dn); in f2fs_get_read_data_page()
726 if (unlikely(dn.data_blkaddr == NULL_ADDR)) { in f2fs_get_read_data_page()
743 if (dn.data_blkaddr == NEW_ADDR) { in f2fs_get_read_data_page()
751 err = f2fs_submit_page_read(inode, page, dn.data_blkaddr); in f2fs_get_read_data_page()
828 struct dnode_of_data dn; in f2fs_get_new_data_page() local
841 set_new_dnode(&dn, inode, ipage, NULL, 0); in f2fs_get_new_data_page()
842 err = f2fs_reserve_block(&dn, index); in f2fs_get_new_data_page()
848 f2fs_put_dnode(&dn); in f2fs_get_new_data_page()
853 if (dn.data_blkaddr == NEW_ADDR) { in f2fs_get_new_data_page()
873 static int __allocate_data_block(struct dnode_of_data *dn, int seg_type) in __allocate_data_block() argument
875 struct f2fs_sb_info *sbi = F2FS_I_SB(dn->inode); in __allocate_data_block()
883 if (unlikely(is_inode_flag_set(dn->inode, FI_NO_ALLOC))) in __allocate_data_block()
886 err = f2fs_get_node_info(sbi, dn->nid, &ni); in __allocate_data_block()
890 dn->data_blkaddr = datablock_addr(dn->inode, in __allocate_data_block()
891 dn->node_page, dn->ofs_in_node); in __allocate_data_block()
892 if (dn->data_blkaddr == NEW_ADDR) in __allocate_data_block()
895 if (unlikely((err = inc_valid_block_count(sbi, dn->inode, &count)))) in __allocate_data_block()
899 set_summary(&sum, dn->nid, dn->ofs_in_node, ni.version); in __allocate_data_block()
900 old_blkaddr = dn->data_blkaddr; in __allocate_data_block()
901 f2fs_allocate_data_block(sbi, NULL, old_blkaddr, &dn->data_blkaddr, in __allocate_data_block()
906 f2fs_set_data_blkaddr(dn); in __allocate_data_block()
909 fofs = f2fs_start_bidx_of_node(ofs_of_node(dn->node_page), dn->inode) + in __allocate_data_block()
910 dn->ofs_in_node; in __allocate_data_block()
911 if (i_size_read(dn->inode) < ((loff_t)(fofs + 1) << PAGE_SHIFT)) in __allocate_data_block()
912 f2fs_i_size_write(dn->inode, in __allocate_data_block()
1001 struct dnode_of_data dn; in f2fs_map_blocks() local
1036 set_new_dnode(&dn, inode, NULL, NULL, 0); in f2fs_map_blocks()
1037 err = f2fs_get_dnode_of_data(&dn, pgofs, mode); in f2fs_map_blocks()
1045 f2fs_get_next_page_offset(&dn, pgofs); in f2fs_map_blocks()
1048 f2fs_get_next_page_offset(&dn, pgofs); in f2fs_map_blocks()
1055 last_ofs_in_node = ofs_in_node = dn.ofs_in_node; in f2fs_map_blocks()
1056 end_offset = ADDRS_PER_PAGE(dn.node_page, inode); in f2fs_map_blocks()
1059 blkaddr = datablock_addr(dn.inode, dn.node_page, dn.ofs_in_node); in f2fs_map_blocks()
1076 last_ofs_in_node = dn.ofs_in_node; in f2fs_map_blocks()
1079 err = __allocate_data_block(&dn, in f2fs_map_blocks()
1087 blkaddr = dn.data_blkaddr; in f2fs_map_blocks()
1132 dn.ofs_in_node++; in f2fs_map_blocks()
1137 (pgofs == end || dn.ofs_in_node == end_offset)) { in f2fs_map_blocks()
1139 dn.ofs_in_node = ofs_in_node; in f2fs_map_blocks()
1140 err = f2fs_reserve_new_blocks(&dn, prealloc); in f2fs_map_blocks()
1144 map->m_len += dn.ofs_in_node - ofs_in_node; in f2fs_map_blocks()
1145 if (prealloc && dn.ofs_in_node != last_ofs_in_node + 1) { in f2fs_map_blocks()
1149 dn.ofs_in_node = end_offset; in f2fs_map_blocks()
1154 else if (dn.ofs_in_node < end_offset) in f2fs_map_blocks()
1161 f2fs_update_extent_cache_range(&dn, in f2fs_map_blocks()
1167 f2fs_put_dnode(&dn); in f2fs_map_blocks()
1171 f2fs_balance_fs(sbi, dn.node_changed); in f2fs_map_blocks()
1180 f2fs_update_extent_cache_range(&dn, in f2fs_map_blocks()
1187 f2fs_put_dnode(&dn); in f2fs_map_blocks()
1191 f2fs_balance_fs(sbi, dn.node_changed); in f2fs_map_blocks()
1733 struct dnode_of_data dn; in f2fs_do_write_data_page() local
1739 set_new_dnode(&dn, inode, NULL, NULL, 0); in f2fs_do_write_data_page()
1757 err = f2fs_get_dnode_of_data(&dn, page->index, LOOKUP_NODE); in f2fs_do_write_data_page()
1761 fio->old_blkaddr = dn.data_blkaddr; in f2fs_do_write_data_page()
1787 f2fs_put_dnode(&dn); in f2fs_do_write_data_page()
1804 err = f2fs_get_node_info(fio->sbi, dn.nid, &ni); in f2fs_do_write_data_page()
1818 f2fs_outplace_write_data(&dn, fio); in f2fs_do_write_data_page()
1824 f2fs_put_dnode(&dn); in f2fs_do_write_data_page()
2250 struct dnode_of_data dn; in prepare_write_begin() local
2277 set_new_dnode(&dn, inode, ipage, ipage, 0); in prepare_write_begin()
2286 err = f2fs_convert_inline_page(&dn, page); in prepare_write_begin()
2289 if (dn.data_blkaddr == NULL_ADDR) in prepare_write_begin()
2290 err = f2fs_get_block(&dn, index); in prepare_write_begin()
2293 err = f2fs_get_block(&dn, index); in prepare_write_begin()
2296 dn.data_blkaddr = ei.blk + index - ei.fofs; in prepare_write_begin()
2299 err = f2fs_get_dnode_of_data(&dn, index, LOOKUP_NODE); in prepare_write_begin()
2300 if (err || dn.data_blkaddr == NULL_ADDR) { in prepare_write_begin()
2301 f2fs_put_dnode(&dn); in prepare_write_begin()
2311 *blk_addr = dn.data_blkaddr; in prepare_write_begin()
2312 *node_changed = dn.node_changed; in prepare_write_begin()
2314 f2fs_put_dnode(&dn); in prepare_write_begin()