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.c25
1 files changed, 24 insertions, 1 deletions
diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c
index 62a332d34fdb..98697be6bdde 100644
--- a/fs/btrfs/extent-tree.c
+++ b/fs/btrfs/extent-tree.c
@@ -3649,7 +3649,6 @@ refill_cluster:
3649 goto loop; 3649 goto loop;
3650checks: 3650checks:
3651 search_start = stripe_align(root, offset); 3651 search_start = stripe_align(root, offset);
3652
3653 /* move on to the next group */ 3652 /* move on to the next group */
3654 if (search_start + num_bytes >= search_end) { 3653 if (search_start + num_bytes >= search_end) {
3655 btrfs_add_free_space(block_group, offset, num_bytes); 3654 btrfs_add_free_space(block_group, offset, num_bytes);
@@ -7040,6 +7039,16 @@ int btrfs_read_block_groups(struct btrfs_root *root)
7040 mutex_init(&cache->cache_mutex); 7039 mutex_init(&cache->cache_mutex);
7041 INIT_LIST_HEAD(&cache->list); 7040 INIT_LIST_HEAD(&cache->list);
7042 INIT_LIST_HEAD(&cache->cluster_list); 7041 INIT_LIST_HEAD(&cache->cluster_list);
7042 cache->sectorsize = root->sectorsize;
7043
7044 /*
7045 * we only want to have 32k of ram per block group for keeping
7046 * track of free space, and if we pass 1/2 of that we want to
7047 * start converting things over to using bitmaps
7048 */
7049 cache->extents_thresh = ((1024 * 32) / 2) /
7050 sizeof(struct btrfs_free_space);
7051
7043 read_extent_buffer(leaf, &cache->item, 7052 read_extent_buffer(leaf, &cache->item,
7044 btrfs_item_ptr_offset(leaf, path->slots[0]), 7053 btrfs_item_ptr_offset(leaf, path->slots[0]),
7045 sizeof(cache->item)); 7054 sizeof(cache->item));
@@ -7091,6 +7100,15 @@ int btrfs_make_block_group(struct btrfs_trans_handle *trans,
7091 cache->key.objectid = chunk_offset; 7100 cache->key.objectid = chunk_offset;
7092 cache->key.offset = size; 7101 cache->key.offset = size;
7093 cache->key.type = BTRFS_BLOCK_GROUP_ITEM_KEY; 7102 cache->key.type = BTRFS_BLOCK_GROUP_ITEM_KEY;
7103 cache->sectorsize = root->sectorsize;
7104
7105 /*
7106 * we only want to have 32k of ram per block group for keeping track
7107 * of free space, and if we pass 1/2 of that we want to start
7108 * converting things over to using bitmaps
7109 */
7110 cache->extents_thresh = ((1024 * 32) / 2) /
7111 sizeof(struct btrfs_free_space);
7094 atomic_set(&cache->count, 1); 7112 atomic_set(&cache->count, 1);
7095 spin_lock_init(&cache->lock); 7113 spin_lock_init(&cache->lock);
7096 spin_lock_init(&cache->tree_lock); 7114 spin_lock_init(&cache->tree_lock);
@@ -7103,6 +7121,11 @@ int btrfs_make_block_group(struct btrfs_trans_handle *trans,
7103 cache->flags = type; 7121 cache->flags = type;
7104 btrfs_set_block_group_flags(&cache->item, type); 7122 btrfs_set_block_group_flags(&cache->item, type);
7105 7123
7124 cache->cached = 1;
7125 ret = btrfs_add_free_space(cache, chunk_offset, size);
7126 BUG_ON(ret);
7127 remove_sb_from_cache(root, cache);
7128
7106 ret = update_space_info(root->fs_info, cache->flags, size, bytes_used, 7129 ret = update_space_info(root->fs_info, cache->flags, size, bytes_used,
7107 &cache->space_info); 7130 &cache->space_info);
7108 BUG_ON(ret); 7131 BUG_ON(ret);