btrfs: make ALLOC_CHUNK use the space info flags
authorJosef Bacik <josef@toxicpanda.com>
Tue, 21 Jul 2020 14:22:16 +0000 (10:22 -0400)
committerDavid Sterba <dsterba@suse.com>
Wed, 7 Oct 2020 10:06:51 +0000 (12:06 +0200)
We have traditionally used flush_space() to flush metadata space, so
we've been unconditionally using btrfs_metadata_alloc_profile() for our
profile to allocate a chunk. However if we're going to use this for
data we need to use btrfs_get_alloc_profile() on the space_info we pass
in.

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 3aaeff2..ed2ca20 100644 (file)
@@ -777,7 +777,7 @@ static void flush_space(struct btrfs_fs_info *fs_info,
                        break;
                }
                ret = btrfs_chunk_alloc(trans,
-                               btrfs_metadata_alloc_profile(fs_info),
+                               btrfs_get_alloc_profile(fs_info, space_info->flags),
                                (state == ALLOC_CHUNK) ? CHUNK_ALLOC_NO_FORCE :
                                        CHUNK_ALLOC_FORCE);
                btrfs_end_transaction(trans);