diff options
author | Josef Bacik <josef@toxicpanda.com> | 2019-08-02 01:19:36 +0300 |
---|---|---|
committer | David Sterba <dsterba@suse.com> | 2019-09-09 15:59:10 +0300 |
commit | 9ce2f423b9463f975720782b3838640da313ecb4 (patch) | |
tree | 567d77d1f495a610d270f30a2edd7a9f0e721420 /fs/btrfs | |
parent | 03235279b4defc85e0e593824b27b5cf814b2fa0 (diff) | |
download | linux-9ce2f423b9463f975720782b3838640da313ecb4.tar.xz |
btrfs: refactor priority_reclaim_metadata_space
With the eviction flushing stuff we'll want to allow for different
states, but still work basically the same way that
priority_reclaim_metadata_space works currently. Refactor this to take
the flushing states and size as an argument so we can use the same logic
for limit flushing and eviction flushing.
Signed-off-by: Josef Bacik <josef@toxicpanda.com>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
Diffstat (limited to 'fs/btrfs')
-rw-r--r-- | fs/btrfs/space-info.c | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/fs/btrfs/space-info.c b/fs/btrfs/space-info.c index 8e00f53601ff..37ec31199675 100644 --- a/fs/btrfs/space-info.c +++ b/fs/btrfs/space-info.c @@ -849,8 +849,10 @@ static const enum btrfs_flush_state priority_flush_states[] = { }; static void priority_reclaim_metadata_space(struct btrfs_fs_info *fs_info, - struct btrfs_space_info *space_info, - struct reserve_ticket *ticket) + struct btrfs_space_info *space_info, + struct reserve_ticket *ticket, + const enum btrfs_flush_state *states, + int states_nr) { u64 to_reclaim; int flush_state; @@ -866,8 +868,7 @@ static void priority_reclaim_metadata_space(struct btrfs_fs_info *fs_info, flush_state = 0; do { - flush_space(fs_info, space_info, to_reclaim, - priority_flush_states[flush_state]); + flush_space(fs_info, space_info, to_reclaim, states[flush_state]); flush_state++; spin_lock(&space_info->lock); if (ticket->bytes == 0) { @@ -875,7 +876,7 @@ static void priority_reclaim_metadata_space(struct btrfs_fs_info *fs_info, return; } spin_unlock(&space_info->lock); - } while (flush_state < ARRAY_SIZE(priority_flush_states)); + } while (flush_state < states_nr); } static void wait_reserve_ticket(struct btrfs_fs_info *fs_info, @@ -924,7 +925,9 @@ static int handle_reserve_ticket(struct btrfs_fs_info *fs_info, if (flush == BTRFS_RESERVE_FLUSH_ALL) wait_reserve_ticket(fs_info, space_info, ticket); else - priority_reclaim_metadata_space(fs_info, space_info, ticket); + priority_reclaim_metadata_space(fs_info, space_info, ticket, + priority_flush_states, + ARRAY_SIZE(priority_flush_states)); spin_lock(&space_info->lock); ret = ticket->error; |