浏览代码

f2fs: don't submit irrelevant page

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>
Chao Yu 8 年之前
父节点
当前提交
6ca56ca429
共有 1 个文件被更改,包括 7 次插入1 次删除
  1. 7 1
      fs/f2fs/data.c

+ 7 - 1
fs/f2fs/data.c

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