Skip to content

Commit

Permalink
Btrfs: don't wait for all the async delalloc when shrinking delalloc
Browse files Browse the repository at this point in the history
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: Miao Xie <miaox@cn.fujitsu.com>
Signed-off-by: Josef Bacik <jbacik@fusionio.com>
Signed-off-by: Chris Mason <chris.mason@fusionio.com>
  • Loading branch information
Miao Xie authored and Chris Mason committed Nov 12, 2013
1 parent c61a16a commit 9f3a074
Showing 1 changed file with 12 additions and 2 deletions.
14 changes: 12 additions & 2 deletions fs/btrfs/extent-tree.c
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down

0 comments on commit 9f3a074

Please sign in to comment.