Commit 90abccf2 authored by Miao Xie's avatar Miao Xie Committed by Chris Mason

Revert "Btrfs: do not do filemap_write_and_wait_range in fsync"

This reverts commit 0885ef5b

After applying the above patch, the performance slowed down because the dirty
page flush can only be done by one task, so revert it.

The following is the test result of sysbench:
	Before		After
	24MB/s		39MB/s
Signed-off-by: default avatarMiao Xie <miaox@cn.fujitsu.com>
parent 698d0082
...@@ -1544,12 +1544,20 @@ int btrfs_sync_file(struct file *file, loff_t start, loff_t end, int datasync) ...@@ -1544,12 +1544,20 @@ int btrfs_sync_file(struct file *file, loff_t start, loff_t end, int datasync)
trace_btrfs_sync_file(file, datasync); trace_btrfs_sync_file(file, datasync);
/*
* We write the dirty pages in the range and wait until they complete
* out of the ->i_mutex. If so, we can flush the dirty pages by
* multi-task, and make the performance up.
*/
ret = filemap_write_and_wait_range(inode->i_mapping, start, end);
if (ret)
return ret;
mutex_lock(&inode->i_mutex); mutex_lock(&inode->i_mutex);
/* /*
* we wait first, since the writeback may change the inode, also wait * We flush the dirty pages again to avoid some dirty pages in the
* ordered range does a filemape_write_and_wait_range which is why we * range being left.
* don't do it above like other file systems.
*/ */
atomic_inc(&root->log_batch); atomic_inc(&root->log_batch);
btrfs_wait_ordered_range(inode, start, end); btrfs_wait_ordered_range(inode, start, end);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment