Merge tag 'for-linus-20150216' of git://git.infradead.org/linux-mtd
[firefly-linux-kernel-4.4.55.git] / fs / f2fs / inline.c
index f2d3c581e7761b9ba7b82db95b755e6ac034fbac..1484c00133cd8e9fe2492c0ee955b7c587c19f97 100644 (file)
@@ -50,6 +50,12 @@ void read_inline_data(struct page *page, struct page *ipage)
        SetPageUptodate(page);
 }
 
+static void truncate_inline_data(struct page *ipage)
+{
+       f2fs_wait_on_page_writeback(ipage, NODE);
+       memset(inline_data_addr(ipage), 0, MAX_INLINE_DATA);
+}
+
 int f2fs_read_inline_data(struct inode *inode, struct page *page)
 {
        struct page *ipage;
@@ -79,7 +85,6 @@ int f2fs_read_inline_data(struct inode *inode, struct page *page)
 int f2fs_convert_inline_page(struct dnode_of_data *dn, struct page *page)
 {
        void *src_addr, *dst_addr;
-       block_t new_blk_addr;
        struct f2fs_io_info fio = {
                .type = DATA,
                .rw = WRITE_SYNC | REQ_PRIO,
@@ -115,9 +120,9 @@ no_update:
 
        /* write data page to try to make data consistent */
        set_page_writeback(page);
-
-       write_data_page(page, dn, &new_blk_addr, &fio);
-       update_extent_cache(new_blk_addr, dn);
+       fio.blk_addr = dn->data_blkaddr;
+       write_data_page(page, dn, &fio);
+       update_extent_cache(dn);
        f2fs_wait_on_page_writeback(page, DATA);
        if (dirty)
                inode_dec_dirty_pages(dn->inode);
@@ -126,7 +131,7 @@ no_update:
        set_inode_flag(F2FS_I(dn->inode), FI_APPEND_WRITE);
 
        /* clear inline data and flag after data writeback */
-       truncate_inline_data(dn->inode_page, 0);
+       truncate_inline_data(dn->inode_page);
 clear_out:
        stat_dec_inline_inode(dn->inode);
        f2fs_clear_inline_inode(dn->inode);
@@ -199,19 +204,6 @@ int f2fs_write_inline_data(struct inode *inode, struct page *page)
        return 0;
 }
 
-void truncate_inline_data(struct page *ipage, u64 from)
-{
-       void *addr;
-
-       if (from >= MAX_INLINE_DATA)
-               return;
-
-       f2fs_wait_on_page_writeback(ipage, NODE);
-
-       addr = inline_data_addr(ipage);
-       memset(addr + from, 0, MAX_INLINE_DATA - from);
-}
-
 bool recover_inline_data(struct inode *inode, struct page *npage)
 {
        struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
@@ -253,7 +245,7 @@ process_inline:
        if (f2fs_has_inline_data(inode)) {
                ipage = get_node_page(sbi, inode->i_ino);
                f2fs_bug_on(sbi, IS_ERR(ipage));
-               truncate_inline_data(ipage, 0);
+               truncate_inline_data(ipage);
                f2fs_clear_inline_inode(inode);
                update_inode(inode, ipage);
                f2fs_put_page(ipage, 1);
@@ -371,7 +363,7 @@ static int f2fs_convert_inline_dir(struct inode *dir, struct page *ipage,
        set_page_dirty(page);
 
        /* clear inline dir and flag after data writeback */
-       truncate_inline_data(ipage, 0);
+       truncate_inline_data(ipage);
 
        stat_dec_inline_dir(dir);
        clear_inode_flag(F2FS_I(dir), FI_INLINE_DENTRY);