Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 28ea6162 authored by Jaegeuk Kim's avatar Jaegeuk Kim
Browse files

f2fs: do not skip writing data pages



For data pages, let's try to flush as much as possible in background.

On /dev/pmem0,

1. dd if=/dev/zero of=/mnt/test/testfile bs=1M count=2048 conv=fsync
 Before : 800 MB/s
 After  : 1.1 GB/s

2. dd if=/dev/zero of=/mnt/test/testfile bs=1M count=2048
 Before : 1.3 GB/s
 After  : 2.2 GB/s

Signed-off-by: default avatarJaegeuk Kim <jaegeuk@kernel.org>
parent 53aa6bbf
Loading
Loading
Loading
Loading
+5 −6
Original line number Diff line number Diff line
@@ -1444,7 +1444,6 @@ static int f2fs_write_data_pages(struct address_space *mapping,
	struct inode *inode = mapping->host;
	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
	int ret;
	long diff;

	/* deal with chardevs and other special file */
	if (!mapping->a_ops->writepage)
@@ -1469,14 +1468,14 @@ static int f2fs_write_data_pages(struct address_space *mapping,

	trace_f2fs_writepages(mapping->host, wbc, DATA);

	diff = nr_pages_to_write(sbi, DATA, wbc);

	ret = f2fs_write_cache_pages(mapping, wbc, __f2fs_writepage, mapping);
	f2fs_submit_merged_bio_cond(sbi, inode, NULL, 0, DATA, WRITE);
	/*
	 * 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);

	wbc->nr_to_write = max((long)0, wbc->nr_to_write - diff);
	return ret;

skip_write:
+1 −3
Original line number Diff line number Diff line
@@ -728,9 +728,7 @@ static inline long nr_pages_to_write(struct f2fs_sb_info *sbi, int type,

	nr_to_write = wbc->nr_to_write;

	if (type == DATA)
		desired = 4096;
	else if (type == NODE)
	if (type == NODE)
		desired = 3 * max_hw_blocks(sbi);
	else
		desired = MAX_BIO_BLOCKS(sbi);