btrfs: make shrink_delalloc take space_info as an arg
authorJosef Bacik <josef@toxicpanda.com>
Tue, 21 Jul 2020 14:22:15 +0000 (10:22 -0400)
committerDavid Sterba <dsterba@suse.com>
Wed, 7 Oct 2020 10:06:51 +0000 (12:06 +0200)
Currently shrink_delalloc just looks up the metadata space info, but
this won't work if we're trying to reclaim space for data chunks.  We
get the right space_info we want passed into flush_space, so simply pass
that along to shrink_delalloc.

Reviewed-by: Nikolay Borisov <nborisov@suse.com>
Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com>
Tested-by: Nikolay Borisov <nborisov@suse.com>
Signed-off-by: Josef Bacik <josef@toxicpanda.com>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/space-info.c

index 2b48b37216ebd2e27af1afc855eb99b38e4758ed..3aaeff287b9c3bd8469cd3de37cebbb90479c3af 100644 (file)
@@ -516,10 +516,10 @@ static inline u64 calc_reclaim_items_nr(struct btrfs_fs_info *fs_info,
 /*
  * shrink metadata reservation for delalloc
  */
-static void shrink_delalloc(struct btrfs_fs_info *fs_info, u64 to_reclaim,
-                           bool wait_ordered)
+static void shrink_delalloc(struct btrfs_fs_info *fs_info,
+                           struct btrfs_space_info *space_info,
+                           u64 to_reclaim, bool wait_ordered)
 {
-       struct btrfs_space_info *space_info;
        struct btrfs_trans_handle *trans;
        u64 delalloc_bytes;
        u64 dio_bytes;
@@ -545,7 +545,6 @@ static void shrink_delalloc(struct btrfs_fs_info *fs_info, u64 to_reclaim,
        }
 
        trans = (struct btrfs_trans_handle *)current->journal_info;
-       space_info = btrfs_find_space_info(fs_info, BTRFS_BLOCK_GROUP_METADATA);
 
        delalloc_bytes = percpu_counter_sum_positive(
                                                &fs_info->delalloc_bytes);
@@ -753,7 +752,7 @@ static void flush_space(struct btrfs_fs_info *fs_info,
                break;
        case FLUSH_DELALLOC:
        case FLUSH_DELALLOC_WAIT:
-               shrink_delalloc(fs_info, num_bytes,
+               shrink_delalloc(fs_info, space_info, num_bytes,
                                state == FLUSH_DELALLOC_WAIT);
                break;
        case FLUSH_DELAYED_REFS_NR: