f2fs: wait on page's writeback in writepages path
authorJaegeuk Kim <jaegeuk@kernel.org>
Thu, 28 Jan 2016 19:48:52 +0000 (11:48 -0800)
committerJaegeuk Kim <jaegeuk@kernel.org>
Tue, 23 Feb 2016 00:07:23 +0000 (16:07 -0800)
Likewise f2fs_write_cache_pages, let's do for node and meta pages too.
Especially, for node blocks, we should do this before marking its fsync
and dentry flags.

Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
fs/f2fs/checkpoint.c
fs/f2fs/node.c

index 112e19fdbe08647124c84e20fa0e3d67cbb6ba1d..96d606d93f2fdee9bd6bbb5d26b5711f37c3dab5 100644 (file)
@@ -232,7 +232,6 @@ static int f2fs_write_meta_page(struct page *page,
        if (unlikely(f2fs_cp_error(sbi)))
                goto redirty_out;
 
-       f2fs_wait_on_page_writeback(page, META, true);
        write_meta_page(sbi, page);
        dec_page_count(sbi, F2FS_DIRTY_META);
        unlock_page(page);
@@ -315,6 +314,9 @@ continue_unlock:
                                goto continue_unlock;
                        }
 
+                       f2fs_wait_on_page_writeback(page, META, true);
+
+                       BUG_ON(PageWriteback(page));
                        if (!clear_page_dirty_for_io(page))
                                goto continue_unlock;
 
index eae8977a72778bbb790b955a6976f291b7784211..511c0e7c3ae182e53d37437cd307b2594f82545f 100644 (file)
@@ -1297,6 +1297,9 @@ continue_unlock:
                                continue;
                        }
 
+                       f2fs_wait_on_page_writeback(page, NODE, true);
+
+                       BUG_ON(PageWriteback(page));
                        if (!clear_page_dirty_for_io(page))
                                goto continue_unlock;
 
@@ -1402,8 +1405,6 @@ static int f2fs_write_node_page(struct page *page,
        if (unlikely(f2fs_cp_error(sbi)))
                goto redirty_out;
 
-       f2fs_wait_on_page_writeback(page, NODE, true);
-
        /* get old block addr of this node page */
        nid = nid_of_node(page);
        f2fs_bug_on(sbi, page->index != nid);