f2fs: don't submit irrelevant page
authorChao Yu <yuchao0@huawei.com>
Thu, 29 Sep 2016 10:50:11 +0000 (18:50 +0800)
committerJaegeuk Kim <jaegeuk@kernel.org>
Sat, 1 Oct 2016 00:34:39 +0000 (17:34 -0700)
While we call ->writepages, there are two cases:
a. we didn't writeout any dirty pages, since they are writebacked by other
thread concurrently.
b. we writeout dirty pages, and have already submitted bio to block layer.

In these cases, we don't need to do additional bio flushing unnecessarily,
it may split bio in cache into smaller one.

Signed-off-by: Chao Yu <yuchao0@huawei.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
fs/f2fs/data.c

index 8b9a1dc151b2fb4d5309231ccd37bf82dd03b9d5..0d0177c9149c191d7fe64ebb9ff55d7ee03476e4 100644 (file)
@@ -1355,6 +1355,7 @@ static int f2fs_write_cache_pages(struct address_space *mapping,
        int cycled;
        int range_whole = 0;
        int tag;
+       int nwritten = 0;
 
        pagevec_init(&pvec, 0);
 
@@ -1429,6 +1430,8 @@ continue_unlock:
                                done_index = page->index + 1;
                                done = 1;
                                break;
+                       } else {
+                               nwritten++;
                        }
 
                        if (--wbc->nr_to_write <= 0 &&
@@ -1450,6 +1453,10 @@ continue_unlock:
        if (wbc->range_cyclic || (range_whole && wbc->nr_to_write > 0))
                mapping->writeback_index = done_index;
 
+       if (nwritten)
+               f2fs_submit_merged_bio_cond(F2FS_M_SB(mapping), mapping->host,
+                                                       NULL, 0, DATA, WRITE);
+
        return ret;
 }
 
@@ -1491,7 +1498,6 @@ static int f2fs_write_data_pages(struct address_space *mapping,
         * if some pages were truncated, we cannot guarantee its mapping->host
         * to detect pending bios.
         */
-       f2fs_submit_merged_bio(sbi, DATA, WRITE);
 
        remove_dirty_inode(inode);
        return ret;