btrfs: refactor helper for bg flags to name conversion
[sfrench/cifs-2.6.git] / fs / btrfs / extent-tree.c
index 5faf057f6f37f11adbfbb7ce48d9dacc74c52605..af73264e33a557a93055efa22453554eadcbf4e1 100644 (file)
@@ -756,27 +756,38 @@ static struct btrfs_space_info *__find_space_info(struct btrfs_fs_info *info,
        return NULL;
 }
 
-static void add_pinned_bytes(struct btrfs_fs_info *fs_info,
-                            struct btrfs_ref *ref, int sign)
+static u64 generic_ref_to_space_flags(struct btrfs_ref *ref)
 {
-       struct btrfs_space_info *space_info;
-       s64 num_bytes;
-       u64 flags;
-
-       ASSERT(sign == 1 || sign == -1);
-       num_bytes = sign * ref->len;
        if (ref->type == BTRFS_REF_METADATA) {
                if (ref->tree_ref.root == BTRFS_CHUNK_TREE_OBJECTID)
-                       flags = BTRFS_BLOCK_GROUP_SYSTEM;
+                       return BTRFS_BLOCK_GROUP_SYSTEM;
                else
-                       flags = BTRFS_BLOCK_GROUP_METADATA;
-       } else {
-               flags = BTRFS_BLOCK_GROUP_DATA;
+                       return BTRFS_BLOCK_GROUP_METADATA;
        }
+       return BTRFS_BLOCK_GROUP_DATA;
+}
+
+static void add_pinned_bytes(struct btrfs_fs_info *fs_info,
+                            struct btrfs_ref *ref)
+{
+       struct btrfs_space_info *space_info;
+       u64 flags = generic_ref_to_space_flags(ref);
 
        space_info = __find_space_info(fs_info, flags);
        ASSERT(space_info);
-       percpu_counter_add_batch(&space_info->total_bytes_pinned, num_bytes,
+       percpu_counter_add_batch(&space_info->total_bytes_pinned, ref->len,
+                   BTRFS_TOTAL_BYTES_PINNED_BATCH);
+}
+
+static void sub_pinned_bytes(struct btrfs_fs_info *fs_info,
+                            struct btrfs_ref *ref)
+{
+       struct btrfs_space_info *space_info;
+       u64 flags = generic_ref_to_space_flags(ref);
+
+       space_info = __find_space_info(fs_info, flags);
+       ASSERT(space_info);
+       percpu_counter_add_batch(&space_info->total_bytes_pinned, -ref->len,
                    BTRFS_TOTAL_BYTES_PINNED_BATCH);
 }
 
@@ -2065,7 +2076,7 @@ int btrfs_inc_extent_ref(struct btrfs_trans_handle *trans,
        btrfs_ref_tree_mod(fs_info, generic_ref);
 
        if (ret == 0 && old_ref_mod < 0 && new_ref_mod >= 0)
-               add_pinned_bytes(fs_info, generic_ref, -1);
+               sub_pinned_bytes(fs_info, generic_ref);
 
        return ret;
 }
@@ -4325,15 +4336,9 @@ static u64 get_profile_num_devs(struct btrfs_fs_info *fs_info, u64 type)
 {
        u64 num_dev;
 
-       if (type & (BTRFS_BLOCK_GROUP_RAID10 |
-                   BTRFS_BLOCK_GROUP_RAID0 |
-                   BTRFS_BLOCK_GROUP_RAID5 |
-                   BTRFS_BLOCK_GROUP_RAID6))
+       num_dev = btrfs_raid_array[btrfs_bg_flags_to_raid_index(type)].devs_max;
+       if (!num_dev)
                num_dev = fs_info->fs_devices->rw_devices;
-       else if (type & BTRFS_BLOCK_GROUP_RAID1)
-               num_dev = 2;
-       else
-               num_dev = 1;    /* DUP or single */
 
        return num_dev;
 }
@@ -7191,7 +7196,7 @@ void btrfs_free_tree_block(struct btrfs_trans_handle *trans,
        }
 out:
        if (pin)
-               add_pinned_bytes(fs_info, &generic_ref, 1);
+               add_pinned_bytes(fs_info, &generic_ref);
 
        if (last_ref) {
                /*
@@ -7239,7 +7244,7 @@ int btrfs_free_extent(struct btrfs_trans_handle *trans, struct btrfs_ref *ref)
                btrfs_ref_tree_mod(fs_info, ref);
 
        if (ret == 0 && old_ref_mod >= 0 && new_ref_mod < 0)
-               add_pinned_bytes(fs_info, ref, 1);
+               add_pinned_bytes(fs_info, ref);
 
        return ret;
 }
@@ -9949,7 +9954,7 @@ static int find_first_block_group(struct btrfs_fs_info *fs_info,
                        struct extent_map_tree *em_tree;
                        struct extent_map *em;
 
-                       em_tree = &root->fs_info->mapping_tree.map_tree;
+                       em_tree = &root->fs_info->mapping_tree;
                        read_lock(&em_tree->lock);
                        em = lookup_extent_mapping(em_tree, found_key.objectid,
                                                   found_key.offset);
@@ -10141,7 +10146,6 @@ void btrfs_add_raid_kobjects(struct btrfs_fs_info *fs_info)
        struct btrfs_space_info *space_info;
        struct raid_kobject *rkobj;
        LIST_HEAD(list);
-       int index;
        int ret = 0;
 
        spin_lock(&fs_info->pending_raid_kobjs_lock);
@@ -10150,10 +10154,9 @@ void btrfs_add_raid_kobjects(struct btrfs_fs_info *fs_info)
 
        list_for_each_entry(rkobj, &list, list) {
                space_info = __find_space_info(fs_info, rkobj->flags);
-               index = btrfs_bg_flags_to_raid_index(rkobj->flags);
 
                ret = kobject_add(&rkobj->kobj, &space_info->kobj,
-                                 "%s", get_raid_name(index));
+                               "%s", btrfs_bg_type_to_raid_name(rkobj->flags));
                if (ret) {
                        kobject_put(&rkobj->kobj);
                        break;
@@ -10243,21 +10246,21 @@ btrfs_create_block_group_cache(struct btrfs_fs_info *fs_info,
  */
 static int check_chunk_block_group_mappings(struct btrfs_fs_info *fs_info)
 {
-       struct btrfs_mapping_tree *map_tree = &fs_info->mapping_tree;
+       struct extent_map_tree *map_tree = &fs_info->mapping_tree;
        struct extent_map *em;
        struct btrfs_block_group_cache *bg;
        u64 start = 0;
        int ret = 0;
 
        while (1) {
-               read_lock(&map_tree->map_tree.lock);
+               read_lock(&map_tree->lock);
                /*
                 * lookup_extent_mapping will return the first extent map
                 * intersecting the range, so setting @len to 1 is enough to
                 * get the first chunk.
                 */
-               em = lookup_extent_mapping(&map_tree->map_tree, start, 1);
-               read_unlock(&map_tree->map_tree.lock);
+               em = lookup_extent_mapping(map_tree, start, 1);
+               read_unlock(&map_tree->lock);
                if (!em)
                        break;
 
@@ -10853,7 +10856,7 @@ int btrfs_remove_block_group(struct btrfs_trans_handle *trans,
        if (remove_em) {
                struct extent_map_tree *em_tree;
 
-               em_tree = &fs_info->mapping_tree.map_tree;
+               em_tree = &fs_info->mapping_tree;
                write_lock(&em_tree->lock);
                remove_extent_mapping(em_tree, em);
                write_unlock(&em_tree->lock);
@@ -10871,7 +10874,7 @@ struct btrfs_trans_handle *
 btrfs_start_trans_remove_block_group(struct btrfs_fs_info *fs_info,
                                     const u64 chunk_offset)
 {
-       struct extent_map_tree *em_tree = &fs_info->mapping_tree.map_tree;
+       struct extent_map_tree *em_tree = &fs_info->mapping_tree;
        struct extent_map *em;
        struct map_lookup *map;
        unsigned int num_items;