@@ -6651,8 +6651,8 @@ static int delete_extent_records(struct btrfs_trans_handle *trans,
u64 bytes = (found_key.type == BTRFS_EXTENT_ITEM_KEY) ?
found_key.offset : fs_info->nodesize;
- ret = btrfs_update_block_group(fs_info->extent_root,
- bytenr, bytes, 0, 0);
+ ret = btrfs_update_block_group(trans, bytenr, bytes,
+ 0, 0);
if (ret)
break;
}
@@ -6730,7 +6730,7 @@ static int record_extent(struct btrfs_trans_handle *trans,
}
btrfs_mark_buffer_dirty(leaf);
- ret = btrfs_update_block_group(extent_root, rec->start,
+ ret = btrfs_update_block_group(trans, rec->start,
rec->max_size, 1, 0);
if (ret)
goto fail;
@@ -735,7 +735,7 @@ static int repair_tree_block_ref(struct btrfs_root *root,
}
btrfs_mark_buffer_dirty(eb);
printf("Added an extent item [%llu %u]\n", bytenr, node_size);
- btrfs_update_block_group(extent_root, bytenr, node_size, 1, 0);
+ btrfs_update_block_group(trans, bytenr, node_size, 1, 0);
nrefs->refs[level] = 0;
nrefs->full_backref[level] =
@@ -3292,8 +3292,8 @@ static int repair_extent_data_item(struct btrfs_root *root,
btrfs_set_extent_flags(eb, ei, BTRFS_EXTENT_FLAG_DATA);
btrfs_mark_buffer_dirty(eb);
- ret = btrfs_update_block_group(extent_root, disk_bytenr,
- num_bytes, 1, 0);
+ ret = btrfs_update_block_group(trans, disk_bytenr, num_bytes,
+ 1, 0);
btrfs_release_path(&path);
}
@@ -1084,7 +1084,7 @@ err:
return ret;
}
-static int block_group_free_all_extent(struct btrfs_root *root,
+static int block_group_free_all_extent(struct btrfs_trans_handle *trans,
struct block_group_record *bg)
{
struct btrfs_block_group_cache *cache;
@@ -1092,7 +1092,7 @@ static int block_group_free_all_extent(struct btrfs_root *root,
u64 start;
u64 end;
- info = root->fs_info;
+ info = trans->fs_info;
cache = btrfs_lookup_block_group(info, bg->objectid);
if (!cache)
return -ENOENT;
@@ -1124,7 +1124,7 @@ static int remove_chunk_extent_item(struct btrfs_trans_handle *trans,
if (ret)
return ret;
- ret = block_group_free_all_extent(root, chunk->bg_rec);
+ ret = block_group_free_all_extent(trans, chunk->bg_rec);
if (ret)
return ret;
}
@@ -2568,8 +2568,8 @@ int btrfs_make_block_group(struct btrfs_trans_handle *trans,
u64 type, u64 chunk_offset, u64 size);
int btrfs_make_block_groups(struct btrfs_trans_handle *trans,
struct btrfs_fs_info *fs_info);
-int btrfs_update_block_group(struct btrfs_root *root, u64 bytenr, u64 num,
- int alloc, int mark_free);
+int btrfs_update_block_group(struct btrfs_trans_handle *trans, u64 bytenr,
+ u64 num, int alloc, int mark_free);
int btrfs_record_file_extent(struct btrfs_trans_handle *trans,
struct btrfs_root *root, u64 objectid,
struct btrfs_inode_item *inode,
@@ -1872,9 +1872,10 @@ static int do_chunk_alloc(struct btrfs_trans_handle *trans,
return 0;
}
-static int update_block_group(struct btrfs_fs_info *info, u64 bytenr,
+static int update_block_group(struct btrfs_trans_handle *trans, u64 bytenr,
u64 num_bytes, int alloc, int mark_free)
{
+ struct btrfs_fs_info *info = trans->fs_info;
struct btrfs_block_group_cache *cache;
u64 total = num_bytes;
u64 old_val;
@@ -2237,8 +2238,7 @@ static int __free_extent(struct btrfs_trans_handle *trans,
goto fail;
}
- update_block_group(trans->fs_info, bytenr, num_bytes, 0,
- mark_free);
+ update_block_group(trans, bytenr, num_bytes, 0, mark_free);
}
fail:
btrfs_free_path(path);
@@ -2570,7 +2570,7 @@ static int alloc_reserved_tree_block(struct btrfs_trans_handle *trans,
if (ret)
return ret;
- ret = update_block_group(fs_info, ins.objectid, fs_info->nodesize, 1,
+ ret = update_block_group(trans, ins.objectid, fs_info->nodesize, 1,
0);
if (sinfo) {
if (fs_info->nodesize > sinfo->bytes_reserved) {
@@ -3026,11 +3026,11 @@ int btrfs_make_block_groups(struct btrfs_trans_handle *trans,
return 0;
}
-int btrfs_update_block_group(struct btrfs_root *root,
+int btrfs_update_block_group(struct btrfs_trans_handle *trans,
u64 bytenr, u64 num_bytes, int alloc,
int mark_free)
{
- return update_block_group(root->fs_info, bytenr, num_bytes,
+ return update_block_group(trans, bytenr, num_bytes,
alloc, mark_free);
}
@@ -3444,12 +3444,12 @@ int btrfs_fix_block_accounting(struct btrfs_trans_handle *trans)
btrfs_item_key_to_cpu(leaf, &key, slot);
if (key.type == BTRFS_EXTENT_ITEM_KEY) {
bytes_used += key.offset;
- ret = btrfs_update_block_group(root,
+ ret = btrfs_update_block_group(trans,
key.objectid, key.offset, 1, 0);
BUG_ON(ret);
} else if (key.type == BTRFS_METADATA_ITEM_KEY) {
bytes_used += fs_info->nodesize;
- ret = btrfs_update_block_group(root,
+ ret = btrfs_update_block_group(trans,
key.objectid, fs_info->nodesize, 1, 0);
if (ret)
goto out;
@@ -3604,7 +3604,7 @@ static int __btrfs_record_file_extent(struct btrfs_trans_handle *trans,
BTRFS_EXTENT_FLAG_DATA);
btrfs_mark_buffer_dirty(leaf);
- ret = btrfs_update_block_group(root, disk_bytenr,
+ ret = btrfs_update_block_group(trans, disk_bytenr,
num_bytes, 1, 0);
if (ret)
goto fail;
@@ -2338,8 +2338,9 @@ again:
return 0;
}
-static void fixup_block_groups(struct btrfs_fs_info *fs_info)
+static void fixup_block_groups(struct btrfs_trans_handle *trans)
{
+ struct btrfs_fs_info *fs_info = trans->fs_info;
struct btrfs_block_group_cache *bg;
struct btrfs_mapping_tree *map_tree = &fs_info->mapping_tree;
struct cache_extent *ce;
@@ -2499,7 +2500,7 @@ static int fixup_chunks_and_devices(struct btrfs_fs_info *fs_info,
return PTR_ERR(trans);
}
- fixup_block_groups(fs_info);
+ fixup_block_groups(trans);
ret = fixup_dev_extents(trans);
if (ret < 0)
goto error;