This patch intends to improve the fsync performance by skipping remaining the
recovery information, only when there is no data that we should recover.

Signed-off-by: Jaegeuk Kim <jaeg...@kernel.org>
---
 fs/f2fs/file.c | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c
index 7c652b3..121689a 100644
--- a/fs/f2fs/file.c
+++ b/fs/f2fs/file.c
@@ -133,6 +133,17 @@ int f2fs_sync_file(struct file *file, loff_t start, loff_t 
end, int datasync)
                return ret;
        }
 
+       /*
+        * if there is no written data, don't waste time to write recovery info.
+        */
+       if (!is_inode_flag_set(fi, FI_APPEND_WRITE) &&
+               !exist_written_data(sbi, inode->i_ino, APPEND_INO)) {
+               if (is_inode_flag_set(fi, FI_UPDATE_WRITE) &&
+                       exist_written_data(sbi, inode->i_ino, UPDATE_INO))
+                       goto flush_out;
+               goto out;
+       }
+
        /* guarantee free sections for fsync */
        f2fs_balance_fs(sbi);
 
@@ -188,6 +199,11 @@ int f2fs_sync_file(struct file *file, loff_t start, loff_t 
end, int datasync)
                ret = wait_on_node_pages_writeback(sbi, inode->i_ino);
                if (ret)
                        goto out;
+
+               /* once recovery info is written, don't need to tack this */
+               remove_dirty_inode(sbi, inode->i_ino, APPEND_INO);
+flush_out:
+               remove_dirty_inode(sbi, inode->i_ino, UPDATE_INO);
                ret = f2fs_issue_flush(F2FS_SB(inode->i_sb));
        }
 out:
-- 
1.8.5.2 (Apple Git-48)

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to