]> git.karo-electronics.de Git - linux-beck.git/blobdiff - fs/f2fs/node.c
f2fs: improve write performance under frequent fsync calls
[linux-beck.git] / fs / f2fs / node.c
index 0230326be4953a1480e05c44bb795b5ea3af8fe3..b8c9301db52ce66977644e4cbd54ed52cba582c5 100644 (file)
@@ -1194,6 +1194,10 @@ static int f2fs_write_node_page(struct page *page,
        nid_t nid;
        block_t new_addr;
        struct node_info ni;
+       struct f2fs_io_info fio = {
+               .type = NODE,
+               .rw = (wbc->sync_mode == WB_SYNC_ALL) ? WRITE_SYNC: WRITE,
+       };
 
        if (unlikely(sbi->por_doing))
                goto redirty_out;
@@ -1218,7 +1222,7 @@ static int f2fs_write_node_page(struct page *page,
 
        mutex_lock(&sbi->node_write);
        set_page_writeback(page);
-       write_node_page(sbi, page, nid, ni.blk_addr, &new_addr);
+       write_node_page(sbi, page, &fio, nid, ni.blk_addr, &new_addr);
        set_node_addr(sbi, &ni, new_addr);
        dec_page_count(sbi, F2FS_DIRTY_NODES);
        mutex_unlock(&sbi->node_write);
@@ -1253,6 +1257,7 @@ static int f2fs_write_node_pages(struct address_space *mapping,
 
        /* if mounting is failed, skip writing node pages */
        wbc->nr_to_write = 3 * max_hw_blocks(sbi);
+       wbc->sync_mode = WB_SYNC_NONE;
        sync_node_pages(sbi, 0, wbc);
        wbc->nr_to_write = nr_to_write - (3 * max_hw_blocks(sbi) -
                                                wbc->nr_to_write);