aboutsummaryrefslogtreecommitdiffstats
path: root/fs/btrfs/extent-tree.c
diff options
context:
space:
mode:
authorIlya Dryomov <idryomov@gmail.com>2012-03-27 10:09:16 -0400
committerIlya Dryomov <idryomov@gmail.com>2012-03-27 10:09:16 -0400
commit899c81eac890bcfa5f3636f4c43f68e8393ac1f8 (patch)
treef2a202c25edd6a58a4c0018db03617b6b0c46fc8 /fs/btrfs/extent-tree.c
parente3176ca2769e420f64eba4b093bbddea6d7a89c3 (diff)
Btrfs: add wrappers for working with alloc profiles
Add functions to abstract the conversion between chunk and extended allocation profile formats and switch everybody to use them. Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
Diffstat (limited to 'fs/btrfs/extent-tree.c')
-rw-r--r--fs/btrfs/extent-tree.c25
1 files changed, 7 insertions, 18 deletions
diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c
index 4269777f185e..9f16fdb463c7 100644
--- a/fs/btrfs/extent-tree.c
+++ b/fs/btrfs/extent-tree.c
@@ -3098,11 +3098,8 @@ static int update_space_info(struct btrfs_fs_info *info, u64 flags,
3098 3098
3099static void set_avail_alloc_bits(struct btrfs_fs_info *fs_info, u64 flags) 3099static void set_avail_alloc_bits(struct btrfs_fs_info *fs_info, u64 flags)
3100{ 3100{
3101 u64 extra_flags = flags & BTRFS_BLOCK_GROUP_PROFILE_MASK; 3101 u64 extra_flags = chunk_to_extended(flags) &
3102 3102 BTRFS_EXTENDED_PROFILE_MASK;
3103 /* chunk -> extended profile */
3104 if (extra_flags == 0)
3105 extra_flags = BTRFS_AVAIL_ALLOC_BIT_SINGLE;
3106 3103
3107 if (flags & BTRFS_BLOCK_GROUP_DATA) 3104 if (flags & BTRFS_BLOCK_GROUP_DATA)
3108 fs_info->avail_data_alloc_bits |= extra_flags; 3105 fs_info->avail_data_alloc_bits |= extra_flags;
@@ -3181,9 +3178,7 @@ u64 btrfs_reduce_alloc_profile(struct btrfs_root *root, u64 flags)
3181 } 3178 }
3182 3179
3183out: 3180out:
3184 /* extended -> chunk profile */ 3181 return extended_to_chunk(flags);
3185 flags &= ~BTRFS_AVAIL_ALLOC_BIT_SINGLE;
3186 return flags;
3187} 3182}
3188 3183
3189static u64 get_alloc_profile(struct btrfs_root *root, u64 flags) 3184static u64 get_alloc_profile(struct btrfs_root *root, u64 flags)
@@ -6914,11 +6909,8 @@ static u64 update_block_group_flags(struct btrfs_root *root, u64 flags)
6914 tgt = BTRFS_BLOCK_GROUP_METADATA | bctl->meta.target; 6909 tgt = BTRFS_BLOCK_GROUP_METADATA | bctl->meta.target;
6915 } 6910 }
6916 6911
6917 if (tgt) { 6912 if (tgt)
6918 /* extended -> chunk profile */ 6913 return extended_to_chunk(tgt);
6919 tgt &= ~BTRFS_AVAIL_ALLOC_BIT_SINGLE;
6920 return tgt;
6921 }
6922 } 6914 }
6923 6915
6924 /* 6916 /*
@@ -7597,11 +7589,8 @@ int btrfs_make_block_group(struct btrfs_trans_handle *trans,
7597 7589
7598static void clear_avail_alloc_bits(struct btrfs_fs_info *fs_info, u64 flags) 7590static void clear_avail_alloc_bits(struct btrfs_fs_info *fs_info, u64 flags)
7599{ 7591{
7600 u64 extra_flags = flags & BTRFS_BLOCK_GROUP_PROFILE_MASK; 7592 u64 extra_flags = chunk_to_extended(flags) &
7601 7593 BTRFS_EXTENDED_PROFILE_MASK;
7602 /* chunk -> extended profile */
7603 if (extra_flags == 0)
7604 extra_flags = BTRFS_AVAIL_ALLOC_BIT_SINGLE;
7605 7594
7606 if (flags & BTRFS_BLOCK_GROUP_DATA) 7595 if (flags & BTRFS_BLOCK_GROUP_DATA)
7607 fs_info->avail_data_alloc_bits &= ~extra_flags; 7596 fs_info->avail_data_alloc_bits &= ~extra_flags;