提交 9f3a074d 编写于 作者: M Miao Xie 提交者: Chris Mason

Btrfs: don't wait for all the async delalloc when shrinking delalloc

It was very likely that there were lots of async delalloc pages in the
filesystem, if we waited until all the pages were flushed, we would be
blocked for a long time, and the performance would also drop down.
Signed-off-by: NMiao Xie <miaox@cn.fujitsu.com>
Signed-off-by: NJosef Bacik <jbacik@fusionio.com>
Signed-off-by: NChris Mason <chris.mason@fusionio.com>
上级 c61a16a7
......@@ -4079,9 +4079,19 @@ static void shrink_delalloc(struct btrfs_root *root, u64 to_reclaim, u64 orig,
* We need to wait for the async pages to actually start before
* we do anything.
*/
wait_event(root->fs_info->async_submit_wait,
!atomic_read(&root->fs_info->async_delalloc_pages));
max_reclaim = atomic_read(&root->fs_info->async_delalloc_pages);
if (!max_reclaim)
goto skip_async;
if (max_reclaim <= nr_pages)
max_reclaim = 0;
else
max_reclaim -= nr_pages;
wait_event(root->fs_info->async_submit_wait,
atomic_read(&root->fs_info->async_delalloc_pages) <=
(int)max_reclaim);
skip_async:
if (!trans)
flush = BTRFS_RESERVE_FLUSH_ALL;
else
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册