return 0;
 }
 
-static void __set_data_blkaddr(struct dnode_of_data *dn)
+static void __set_data_blkaddr(struct dnode_of_data *dn, block_t blkaddr)
 {
        __le32 *addr = get_dnode_addr(dn->inode, dn->node_page);
 
+       dn->data_blkaddr = blkaddr;
        addr[dn->ofs_in_node] = cpu_to_le32(dn->data_blkaddr);
 }
 
  *  ->node_page
  *    update block addresses in the node page
  */
-void f2fs_set_data_blkaddr(struct dnode_of_data *dn)
+void f2fs_set_data_blkaddr(struct dnode_of_data *dn, block_t blkaddr)
 {
        f2fs_wait_on_page_writeback(dn->node_page, NODE, true, true);
-       __set_data_blkaddr(dn);
+       __set_data_blkaddr(dn, blkaddr);
        if (set_page_dirty(dn->node_page))
                dn->node_changed = true;
 }
 
 void f2fs_update_data_blkaddr(struct dnode_of_data *dn, block_t blkaddr)
 {
-       dn->data_blkaddr = blkaddr;
-       f2fs_set_data_blkaddr(dn);
+       f2fs_set_data_blkaddr(dn, blkaddr);
        f2fs_update_read_extent_cache(dn);
 }
 
                block_t blkaddr = f2fs_data_blkaddr(dn);
 
                if (blkaddr == NULL_ADDR) {
-                       dn->data_blkaddr = NEW_ADDR;
-                       __set_data_blkaddr(dn);
+                       __set_data_blkaddr(dn, NEW_ADDR);
                        count--;
                }
        }
 
 struct block_device *f2fs_target_device(struct f2fs_sb_info *sbi,
                block_t blk_addr, sector_t *sector);
 int f2fs_target_device_index(struct f2fs_sb_info *sbi, block_t blkaddr);
-void f2fs_set_data_blkaddr(struct dnode_of_data *dn);
+void f2fs_set_data_blkaddr(struct dnode_of_data *dn, block_t blkaddr);
 void f2fs_update_data_blkaddr(struct dnode_of_data *dn, block_t blkaddr);
 int f2fs_reserve_new_blocks(struct dnode_of_data *dn, blkcnt_t count);
 int f2fs_reserve_new_block(struct dnode_of_data *dn);
 
                if (blkaddr == NULL_ADDR)
                        continue;
 
-               dn->data_blkaddr = NULL_ADDR;
-               f2fs_set_data_blkaddr(dn);
+               f2fs_set_data_blkaddr(dn, NULL_ADDR);
 
                if (__is_valid_data_blkaddr(blkaddr)) {
                        if (!f2fs_is_valid_blkaddr(sbi, blkaddr,
                }
 
                f2fs_invalidate_blocks(sbi, dn->data_blkaddr);
-               dn->data_blkaddr = NEW_ADDR;
-               f2fs_set_data_blkaddr(dn);
+               f2fs_set_data_blkaddr(dn, NEW_ADDR);
        }
 
        f2fs_update_read_extent_cache_range(dn, start, 0, index - start);
                        if (blkaddr != NEW_ADDR)
                                continue;
 
-                       dn->data_blkaddr = NULL_ADDR;
-                       f2fs_set_data_blkaddr(dn);
+                       f2fs_set_data_blkaddr(dn, NULL_ADDR);
                }
 
                f2fs_i_compr_blocks_update(dn->inode, compr_blocks, false);
                                continue;
                        }
 
-                       dn->data_blkaddr = NEW_ADDR;
-                       f2fs_set_data_blkaddr(dn);
+                       f2fs_set_data_blkaddr(dn, NEW_ADDR);
                }
 
                reserved = cluster_size - compr_blocks;