Lines Matching refs:dn
203 void set_data_blkaddr(struct dnode_of_data *dn) in set_data_blkaddr() argument
207 struct page *node_page = dn->node_page; in set_data_blkaddr()
208 unsigned int ofs_in_node = dn->ofs_in_node; in set_data_blkaddr()
216 addr_array[ofs_in_node] = cpu_to_le32(dn->data_blkaddr); in set_data_blkaddr()
220 int reserve_new_block(struct dnode_of_data *dn) in reserve_new_block() argument
222 struct f2fs_sb_info *sbi = F2FS_I_SB(dn->inode); in reserve_new_block()
224 if (unlikely(is_inode_flag_set(F2FS_I(dn->inode), FI_NO_ALLOC))) in reserve_new_block()
226 if (unlikely(!inc_valid_block_count(sbi, dn->inode, 1))) in reserve_new_block()
229 trace_f2fs_reserve_new_block(dn->inode, dn->nid, dn->ofs_in_node); in reserve_new_block()
231 dn->data_blkaddr = NEW_ADDR; in reserve_new_block()
232 set_data_blkaddr(dn); in reserve_new_block()
233 mark_inode_dirty(dn->inode); in reserve_new_block()
234 sync_inode_page(dn); in reserve_new_block()
238 int f2fs_reserve_block(struct dnode_of_data *dn, pgoff_t index) in f2fs_reserve_block() argument
240 bool need_put = dn->inode_page ? false : true; in f2fs_reserve_block()
243 err = get_dnode_of_data(dn, index, ALLOC_NODE); in f2fs_reserve_block()
247 if (dn->data_blkaddr == NULL_ADDR) in f2fs_reserve_block()
248 err = reserve_new_block(dn); in f2fs_reserve_block()
250 f2fs_put_dnode(dn); in f2fs_reserve_block()
887 void f2fs_update_extent_cache(struct dnode_of_data *dn) in f2fs_update_extent_cache() argument
889 struct f2fs_inode_info *fi = F2FS_I(dn->inode); in f2fs_update_extent_cache()
892 f2fs_bug_on(F2FS_I_SB(dn->inode), dn->data_blkaddr == NEW_ADDR); in f2fs_update_extent_cache()
897 fofs = start_bidx_of_node(ofs_of_node(dn->node_page), fi) + in f2fs_update_extent_cache()
898 dn->ofs_in_node; in f2fs_update_extent_cache()
900 if (test_opt(F2FS_I_SB(dn->inode), EXTENT_CACHE)) in f2fs_update_extent_cache()
901 return f2fs_update_extent_tree(dn->inode, fofs, in f2fs_update_extent_cache()
902 dn->data_blkaddr); in f2fs_update_extent_cache()
904 if (update_extent_info(dn->inode, fofs, dn->data_blkaddr)) in f2fs_update_extent_cache()
905 sync_inode_page(dn); in f2fs_update_extent_cache()
911 struct dnode_of_data dn; in find_data_page() local
934 dn.data_blkaddr = ei.blk + index - ei.fofs; in find_data_page()
938 set_new_dnode(&dn, inode, NULL, NULL, 0); in find_data_page()
939 err = get_dnode_of_data(&dn, index, LOOKUP_NODE); in find_data_page()
942 f2fs_put_dnode(&dn); in find_data_page()
944 if (dn.data_blkaddr == NULL_ADDR) in find_data_page()
948 if (unlikely(dn.data_blkaddr == NEW_ADDR)) in find_data_page()
961 fio.blk_addr = dn.data_blkaddr; in find_data_page()
984 struct dnode_of_data dn; in get_lock_data_page() local
998 dn.data_blkaddr = ei.blk + index - ei.fofs; in get_lock_data_page()
1002 set_new_dnode(&dn, inode, NULL, NULL, 0); in get_lock_data_page()
1003 err = get_dnode_of_data(&dn, index, LOOKUP_NODE); in get_lock_data_page()
1008 f2fs_put_dnode(&dn); in get_lock_data_page()
1010 if (unlikely(dn.data_blkaddr == NULL_ADDR)) { in get_lock_data_page()
1025 if (dn.data_blkaddr == NEW_ADDR) { in get_lock_data_page()
1031 fio.blk_addr = dn.data_blkaddr; in get_lock_data_page()
1061 struct dnode_of_data dn; in get_new_data_page() local
1064 set_new_dnode(&dn, inode, ipage, NULL, 0); in get_new_data_page()
1065 err = f2fs_reserve_block(&dn, index); in get_new_data_page()
1078 if (dn.data_blkaddr == NEW_ADDR) { in get_new_data_page()
1085 .blk_addr = dn.data_blkaddr, in get_new_data_page()
1112 f2fs_put_dnode(&dn); in get_new_data_page()
1116 static int __allocate_data_block(struct dnode_of_data *dn) in __allocate_data_block() argument
1118 struct f2fs_sb_info *sbi = F2FS_I_SB(dn->inode); in __allocate_data_block()
1119 struct f2fs_inode_info *fi = F2FS_I(dn->inode); in __allocate_data_block()
1125 if (unlikely(is_inode_flag_set(F2FS_I(dn->inode), FI_NO_ALLOC))) in __allocate_data_block()
1128 dn->data_blkaddr = datablock_addr(dn->node_page, dn->ofs_in_node); in __allocate_data_block()
1129 if (dn->data_blkaddr == NEW_ADDR) in __allocate_data_block()
1132 if (unlikely(!inc_valid_block_count(sbi, dn->inode, 1))) in __allocate_data_block()
1136 get_node_info(sbi, dn->nid, &ni); in __allocate_data_block()
1137 set_summary(&sum, dn->nid, dn->ofs_in_node, ni.version); in __allocate_data_block()
1139 if (dn->ofs_in_node == 0 && dn->inode_page == dn->node_page) in __allocate_data_block()
1142 allocate_data_block(sbi, NULL, dn->data_blkaddr, &dn->data_blkaddr, in __allocate_data_block()
1146 set_data_blkaddr(dn); in __allocate_data_block()
1149 fofs = start_bidx_of_node(ofs_of_node(dn->node_page), fi) + in __allocate_data_block()
1150 dn->ofs_in_node; in __allocate_data_block()
1151 if (i_size_read(dn->inode) < ((fofs + 1) << PAGE_CACHE_SHIFT)) in __allocate_data_block()
1152 i_size_write(dn->inode, ((fofs + 1) << PAGE_CACHE_SHIFT)); in __allocate_data_block()
1161 struct dnode_of_data dn; in __allocate_data_blocks() local
1172 set_new_dnode(&dn, inode, NULL, NULL, 0); in __allocate_data_blocks()
1173 if (get_dnode_of_data(&dn, start, ALLOC_NODE)) in __allocate_data_blocks()
1177 end_offset = ADDRS_PER_PAGE(dn.node_page, F2FS_I(inode)); in __allocate_data_blocks()
1179 while (dn.ofs_in_node < end_offset && len) { in __allocate_data_blocks()
1182 blkaddr = datablock_addr(dn.node_page, dn.ofs_in_node); in __allocate_data_blocks()
1184 if (__allocate_data_block(&dn)) in __allocate_data_blocks()
1190 dn.ofs_in_node++; in __allocate_data_blocks()
1194 sync_inode_page(&dn); in __allocate_data_blocks()
1196 f2fs_put_dnode(&dn); in __allocate_data_blocks()
1203 sync_inode_page(&dn); in __allocate_data_blocks()
1204 f2fs_put_dnode(&dn); in __allocate_data_blocks()
1223 struct dnode_of_data dn; in __get_data_block() local
1242 set_new_dnode(&dn, inode, NULL, NULL, 0); in __get_data_block()
1243 err = get_dnode_of_data(&dn, pgofs, mode); in __get_data_block()
1249 if (dn.data_blkaddr == NEW_ADDR && !fiemap) in __get_data_block()
1252 if (dn.data_blkaddr != NULL_ADDR) { in __get_data_block()
1254 map_bh(bh_result, inode->i_sb, dn.data_blkaddr); in __get_data_block()
1256 err = __allocate_data_block(&dn); in __get_data_block()
1261 map_bh(bh_result, inode->i_sb, dn.data_blkaddr); in __get_data_block()
1266 end_offset = ADDRS_PER_PAGE(dn.node_page, F2FS_I(inode)); in __get_data_block()
1268 dn.ofs_in_node++; in __get_data_block()
1272 if (dn.ofs_in_node >= end_offset) { in __get_data_block()
1274 sync_inode_page(&dn); in __get_data_block()
1276 f2fs_put_dnode(&dn); in __get_data_block()
1278 set_new_dnode(&dn, inode, NULL, NULL, 0); in __get_data_block()
1279 err = get_dnode_of_data(&dn, pgofs, mode); in __get_data_block()
1285 if (dn.data_blkaddr == NEW_ADDR && !fiemap) in __get_data_block()
1288 end_offset = ADDRS_PER_PAGE(dn.node_page, F2FS_I(inode)); in __get_data_block()
1292 block_t blkaddr = datablock_addr(dn.node_page, dn.ofs_in_node); in __get_data_block()
1294 err = __allocate_data_block(&dn); in __get_data_block()
1299 blkaddr = dn.data_blkaddr; in __get_data_block()
1304 dn.ofs_in_node++; in __get_data_block()
1312 sync_inode_page(&dn); in __get_data_block()
1314 f2fs_put_dnode(&dn); in __get_data_block()
1374 struct dnode_of_data dn; in do_write_data_page() local
1377 set_new_dnode(&dn, inode, NULL, NULL, 0); in do_write_data_page()
1378 err = get_dnode_of_data(&dn, page->index, LOOKUP_NODE); in do_write_data_page()
1382 fio->blk_addr = dn.data_blkaddr; in do_write_data_page()
1403 write_data_page(page, &dn, fio); in do_write_data_page()
1404 set_data_blkaddr(&dn); in do_write_data_page()
1405 f2fs_update_extent_cache(&dn); in do_write_data_page()
1412 f2fs_put_dnode(&dn); in do_write_data_page()
1575 struct dnode_of_data dn; in f2fs_write_begin() local
1610 set_new_dnode(&dn, inode, ipage, ipage, 0); in f2fs_write_begin()
1616 sync_inode_page(&dn); in f2fs_write_begin()
1619 err = f2fs_convert_inline_page(&dn, page); in f2fs_write_begin()
1623 err = f2fs_reserve_block(&dn, index); in f2fs_write_begin()
1627 f2fs_put_dnode(&dn); in f2fs_write_begin()
1644 if (dn.data_blkaddr == NEW_ADDR) { in f2fs_write_begin()
1650 .blk_addr = dn.data_blkaddr, in f2fs_write_begin()
1673 f2fs_put_dnode(&dn); in f2fs_write_begin()