From b093bae696f6ee2a6cc0484b58aec525d02412b7 Mon Sep 17 00:00:00 2001 From: Ilya Dryomov Date: Mon, 16 Jan 2012 22:04:48 +0200 Subject: [PATCH] --- yaml --- r: 285965 b: refs/heads/master c: 70922617b0099f420deceb53d5dc7f4fb30d08d0 h: refs/heads/master i: 285963: bd3edcf7c97307f395cfaa84611c4f03933a3c75 v: v3 --- [refs] | 2 +- trunk/fs/btrfs/ctree.h | 18 ++++++++++++++++++ trunk/fs/btrfs/extent-tree.c | 2 +- 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/[refs] b/[refs] index 59e32b42d760..ed7ca028ac2b 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: ea67176ae8c024f64d85ec33873e5eadf1af7247 +refs/heads/master: 70922617b0099f420deceb53d5dc7f4fb30d08d0 diff --git a/trunk/fs/btrfs/ctree.h b/trunk/fs/btrfs/ctree.h index c4d98c8df5c5..1e7aea60da2b 100644 --- a/trunk/fs/btrfs/ctree.h +++ b/trunk/fs/btrfs/ctree.h @@ -2536,6 +2536,24 @@ static inline void free_fs_info(struct btrfs_fs_info *fs_info) kfree(fs_info->super_for_commit); kfree(fs_info); } +/** + * profile_is_valid - tests whether a given profile is valid and reduced + * @flags: profile to validate + * @extended: if true @flags is treated as an extended profile + */ +static inline int profile_is_valid(u64 flags, int extended) +{ + u64 mask = ~BTRFS_BLOCK_GROUP_PROFILE_MASK; + + flags &= ~BTRFS_BLOCK_GROUP_TYPE_MASK; + if (extended) + mask &= ~BTRFS_AVAIL_ALLOC_BIT_SINGLE; + + if (flags & mask) + return 0; + /* true if zero or exactly one bit set */ + return (flags & (~flags + 1)) == flags; +} /* root-item.c */ int btrfs_find_root_ref(struct btrfs_root *tree_root, diff --git a/trunk/fs/btrfs/extent-tree.c b/trunk/fs/btrfs/extent-tree.c index 946b0671c5d9..a1a18ea7b6c6 100644 --- a/trunk/fs/btrfs/extent-tree.c +++ b/trunk/fs/btrfs/extent-tree.c @@ -3295,7 +3295,7 @@ static int do_chunk_alloc(struct btrfs_trans_handle *trans, int wait_for_alloc = 0; int ret = 0; - flags = btrfs_reduce_alloc_profile(extent_root, flags); + BUG_ON(!profile_is_valid(flags, 0)); space_info = __find_space_info(extent_root->fs_info, flags); if (!space_info) {