aboutsummaryrefslogtreecommitdiffstats
path: root/fs/btrfs/extent-tree.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/btrfs/extent-tree.c')
-rw-r--r--fs/btrfs/extent-tree.c30
1 files changed, 21 insertions, 9 deletions
diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c
index a8d8204188d1..15a22949da17 100644
--- a/fs/btrfs/extent-tree.c
+++ b/fs/btrfs/extent-tree.c
@@ -3014,16 +3014,24 @@ static int update_space_info(struct btrfs_fs_info *info, u64 flags,
3014static void set_avail_alloc_bits(struct btrfs_fs_info *fs_info, u64 flags) 3014static void set_avail_alloc_bits(struct btrfs_fs_info *fs_info, u64 flags)
3015{ 3015{
3016 u64 extra_flags = flags & BTRFS_BLOCK_GROUP_PROFILE_MASK; 3016 u64 extra_flags = flags & BTRFS_BLOCK_GROUP_PROFILE_MASK;
3017 if (extra_flags) { 3017
3018 if (flags & BTRFS_BLOCK_GROUP_DATA) 3018 /* chunk -> extended profile */
3019 fs_info->avail_data_alloc_bits |= extra_flags; 3019 if (extra_flags == 0)
3020 if (flags & BTRFS_BLOCK_GROUP_METADATA) 3020 extra_flags = BTRFS_AVAIL_ALLOC_BIT_SINGLE;
3021 fs_info->avail_metadata_alloc_bits |= extra_flags; 3021
3022 if (flags & BTRFS_BLOCK_GROUP_SYSTEM) 3022 if (flags & BTRFS_BLOCK_GROUP_DATA)
3023 fs_info->avail_system_alloc_bits |= extra_flags; 3023 fs_info->avail_data_alloc_bits |= extra_flags;
3024 } 3024 if (flags & BTRFS_BLOCK_GROUP_METADATA)
3025 fs_info->avail_metadata_alloc_bits |= extra_flags;
3026 if (flags & BTRFS_BLOCK_GROUP_SYSTEM)
3027 fs_info->avail_system_alloc_bits |= extra_flags;
3025} 3028}
3026 3029
3030/*
3031 * @flags: available profiles in extended format (see ctree.h)
3032 *
3033 * Returns reduced profile in chunk format.
3034 */
3027u64 btrfs_reduce_alloc_profile(struct btrfs_root *root, u64 flags) 3035u64 btrfs_reduce_alloc_profile(struct btrfs_root *root, u64 flags)
3028{ 3036{
3029 /* 3037 /*
@@ -3053,8 +3061,12 @@ u64 btrfs_reduce_alloc_profile(struct btrfs_root *root, u64 flags)
3053 if ((flags & BTRFS_BLOCK_GROUP_RAID0) && 3061 if ((flags & BTRFS_BLOCK_GROUP_RAID0) &&
3054 ((flags & BTRFS_BLOCK_GROUP_RAID1) | 3062 ((flags & BTRFS_BLOCK_GROUP_RAID1) |
3055 (flags & BTRFS_BLOCK_GROUP_RAID10) | 3063 (flags & BTRFS_BLOCK_GROUP_RAID10) |
3056 (flags & BTRFS_BLOCK_GROUP_DUP))) 3064 (flags & BTRFS_BLOCK_GROUP_DUP))) {
3057 flags &= ~BTRFS_BLOCK_GROUP_RAID0; 3065 flags &= ~BTRFS_BLOCK_GROUP_RAID0;
3066 }
3067
3068 /* extended -> chunk profile */
3069 flags &= ~BTRFS_AVAIL_ALLOC_BIT_SINGLE;
3058 return flags; 3070 return flags;
3059} 3071}
3060 3072