Skip to content

Commit

Permalink
Btrfs: don't commit the transaction in the async space flushing
Browse files Browse the repository at this point in the history
We're triggering a huge number of commits from
btrfs_async_reclaim_metadata_space.  These aren't really requried,
because everyone calling the async reclaim code is going to end up
triggering a commit on their own.

Signed-off-by: Chris Mason <clm@fb.com>
  • Loading branch information
Josef Bacik authored and Chris Mason committed Apr 10, 2015
1 parent cb723e4 commit 365c531
Showing 1 changed file with 8 additions and 6 deletions.
14 changes: 8 additions & 6 deletions fs/btrfs/extent-tree.c
Original file line number Diff line number Diff line change
Expand Up @@ -4329,8 +4329,13 @@ btrfs_calc_reclaim_metadata_size(struct btrfs_root *root,
static inline int need_do_async_reclaim(struct btrfs_space_info *space_info,
struct btrfs_fs_info *fs_info, u64 used)
{
return (used >= div_factor_fine(space_info->total_bytes, 98) &&
!btrfs_fs_closing(fs_info) &&
u64 thresh = div_factor_fine(space_info->total_bytes, 98);

/* If we're just plain full then async reclaim just slows us down. */
if (space_info->bytes_used >= thresh)
return 0;

return (used >= thresh && !btrfs_fs_closing(fs_info) &&
!test_bit(BTRFS_FS_STATE_REMOUNTING, &fs_info->fs_state));
}

Expand Down Expand Up @@ -4385,10 +4390,7 @@ static void btrfs_async_reclaim_metadata_space(struct work_struct *work)
if (!btrfs_need_do_async_reclaim(space_info, fs_info,
flush_state))
return;
} while (flush_state <= COMMIT_TRANS);

if (btrfs_need_do_async_reclaim(space_info, fs_info, flush_state))
queue_work(system_unbound_wq, work);
} while (flush_state < COMMIT_TRANS);
}

void btrfs_init_async_reclaim_work(struct work_struct *work)
Expand Down

0 comments on commit 365c531

Please sign in to comment.