Signed-off-by: Hou Pengyang <houpengy...@huawei.com>
Signed-off-by: Chao Yu <yuch...@huawei.com>
---
 fs/f2fs/data.c | 24 ++++++++++++++++++++++++
 1 file changed, 24 insertions(+)

diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c
index 6b18750..1c99ae1 100644
--- a/fs/f2fs/data.c
+++ b/fs/f2fs/data.c
@@ -1367,8 +1367,32 @@ int do_write_data_page(struct f2fs_io_info *fio)
        struct page *page = fio->page;
        struct inode *inode = page->mapping->host;
        struct dnode_of_data dn;
+       struct extent_info ei = {0,0,0};
        int err = 0;
 
+       /*
+        * If a page is cold, NOT atomit written and need_ipu now, there is
+        * a high probability that IPU should be adapted. For IPU, we try to
+        * check extent tree to get the block index first, instead of reading
+        * the dnode page, where may lead to an useless dnode IO, since no need 
to
+        * update the dnode index for IPU.
+        */
+       if (unlikely(need_inplace_update_block(fio, page) &&
+                       f2fs_lookup_extent_cache(inode, page->index, &ei))) {
+
+               fio->old_blkaddr = ei.blk + page->index - ei.fofs;
+
+               if (fio->old_blkaddr != NEW_ADDR &&
+                               fio->old_blkaddr != NULL_ADDR) {
+                       err = f2fs_encrypt_page(fio, page);
+                       if (err)
+                               return err;
+                       set_page_writeback(page);
+                       err = do_rewrite_data_page(fio, page);
+                       return err;
+               }
+       }
+
        set_new_dnode(&dn, inode, NULL, NULL, 0);
        err = get_dnode_of_data(&dn, page->index, LOOKUP_NODE);
        if (err)
-- 
2.10.1


------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

Reply via email to