diff options
author | Ilya Dryomov <idryomov@gmail.com> | 2012-03-27 10:09:16 -0400 |
---|---|---|
committer | Ilya Dryomov <idryomov@gmail.com> | 2012-03-27 10:09:16 -0400 |
commit | 899c81eac890bcfa5f3636f4c43f68e8393ac1f8 (patch) | |
tree | f2a202c25edd6a58a4c0018db03617b6b0c46fc8 /fs/btrfs/extent-tree.c | |
parent | e3176ca2769e420f64eba4b093bbddea6d7a89c3 (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.c | 25 |
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 | ||
3099 | static void set_avail_alloc_bits(struct btrfs_fs_info *fs_info, u64 flags) | 3099 | static 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 | ||
3183 | out: | 3180 | out: |
3184 | /* extended -> chunk profile */ | 3181 | return extended_to_chunk(flags); |
3185 | flags &= ~BTRFS_AVAIL_ALLOC_BIT_SINGLE; | ||
3186 | return flags; | ||
3187 | } | 3182 | } |
3188 | 3183 | ||
3189 | static u64 get_alloc_profile(struct btrfs_root *root, u64 flags) | 3184 | static 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 | ||
7598 | static void clear_avail_alloc_bits(struct btrfs_fs_info *fs_info, u64 flags) | 7590 | static 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; |