In f2fs_sync_file, if there is no written appended writes, it skips
to write its node blocks.
But, if there is up-to-date inode page, we should write it to update
its metadata during the roll-forward recovery.

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

diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c
index c814cd2..fb96256 100644
--- a/fs/f2fs/file.c
+++ b/fs/f2fs/file.c
@@ -169,12 +169,21 @@ int f2fs_sync_file(struct file *file, loff_t start, 
loff_t end, int datasync)
         */
        if (!is_inode_flag_set(fi, FI_APPEND_WRITE) &&
                        !exist_written_data(sbi, ino, APPEND_INO)) {
+               struct page *i = find_get_page(NODE_MAPPING(sbi), ino);
+
+               /* But we need to avoid that there are some inode updates */
+               if ((i && PageDirty(i)) || !fsync_mark_done(sbi, ino)) {
+                       f2fs_put_page(i, 0);
+                       goto go_write;
+               }
+               f2fs_put_page(i, 0);
+
                if (is_inode_flag_set(fi, FI_UPDATE_WRITE) ||
                                exist_written_data(sbi, ino, UPDATE_INO))
                        goto flush_out;
                goto out;
        }
-
+go_write:
        /* guarantee free sections for fsync */
        f2fs_balance_fs(sbi);
 
-- 
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