Skip to content

Commit 3466670

Browse files
josefbacikkdave
authored andcommitted
btrfs: add a alloc_reserved_extent helper
We duplicate this logic for both data and metadata, at this point we've already done our type specific extent root operations, this is just doing the accounting and removing the space from the free space tree. Extract this common logic out into a helper. Signed-off-by: Josef Bacik <[email protected]> Reviewed-by: David Sterba <[email protected]> Signed-off-by: David Sterba <[email protected]>
1 parent b3c958a commit 3466670

File tree

1 file changed

+24
-32
lines changed

1 file changed

+24
-32
lines changed

fs/btrfs/extent-tree.c

Lines changed: 24 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -4604,6 +4604,28 @@ int btrfs_pin_reserved_extent(struct btrfs_trans_handle *trans, u64 start,
46044604
return ret;
46054605
}
46064606

4607+
static int alloc_reserved_extent(struct btrfs_trans_handle *trans, u64 bytenr,
4608+
u64 num_bytes)
4609+
{
4610+
struct btrfs_fs_info *fs_info = trans->fs_info;
4611+
int ret;
4612+
4613+
ret = remove_from_free_space_tree(trans, bytenr, num_bytes);
4614+
if (ret)
4615+
return ret;
4616+
4617+
ret = btrfs_update_block_group(trans, bytenr, num_bytes, true);
4618+
if (ret) {
4619+
ASSERT(!ret);
4620+
btrfs_err(fs_info, "update block group failed for %llu %llu",
4621+
bytenr, num_bytes);
4622+
return ret;
4623+
}
4624+
4625+
trace_btrfs_reserved_extent_alloc(fs_info, bytenr, num_bytes);
4626+
return 0;
4627+
}
4628+
46074629
static int alloc_reserved_file_extent(struct btrfs_trans_handle *trans,
46084630
u64 parent, u64 root_objectid,
46094631
u64 flags, u64 owner, u64 offset,
@@ -4664,18 +4686,7 @@ static int alloc_reserved_file_extent(struct btrfs_trans_handle *trans,
46644686
btrfs_mark_buffer_dirty(path->nodes[0]);
46654687
btrfs_free_path(path);
46664688

4667-
ret = remove_from_free_space_tree(trans, ins->objectid, ins->offset);
4668-
if (ret)
4669-
return ret;
4670-
4671-
ret = btrfs_update_block_group(trans, ins->objectid, ins->offset, true);
4672-
if (ret) { /* -ENOENT, logic error */
4673-
btrfs_err(fs_info, "update block group failed for %llu %llu",
4674-
ins->objectid, ins->offset);
4675-
BUG();
4676-
}
4677-
trace_btrfs_reserved_extent_alloc(fs_info, ins->objectid, ins->offset);
4678-
return ret;
4689+
return alloc_reserved_extent(trans, ins->objectid, ins->offset);
46794690
}
46804691

46814692
static int alloc_reserved_tree_block(struct btrfs_trans_handle *trans,
@@ -4693,7 +4704,6 @@ static int alloc_reserved_tree_block(struct btrfs_trans_handle *trans,
46934704
struct extent_buffer *leaf;
46944705
struct btrfs_delayed_tree_ref *ref;
46954706
u32 size = sizeof(*extent_item) + sizeof(*iref);
4696-
u64 num_bytes;
46974707
u64 flags = extent_op->flags_to_set;
46984708
bool skinny_metadata = btrfs_fs_incompat(fs_info, SKINNY_METADATA);
46994709

@@ -4703,12 +4713,10 @@ static int alloc_reserved_tree_block(struct btrfs_trans_handle *trans,
47034713
if (skinny_metadata) {
47044714
extent_key.offset = ref->level;
47054715
extent_key.type = BTRFS_METADATA_ITEM_KEY;
4706-
num_bytes = fs_info->nodesize;
47074716
} else {
47084717
extent_key.offset = node->num_bytes;
47094718
extent_key.type = BTRFS_EXTENT_ITEM_KEY;
47104719
size += sizeof(*block_info);
4711-
num_bytes = node->num_bytes;
47124720
}
47134721

47144722
path = btrfs_alloc_path();
@@ -4753,23 +4761,7 @@ static int alloc_reserved_tree_block(struct btrfs_trans_handle *trans,
47534761
btrfs_mark_buffer_dirty(leaf);
47544762
btrfs_free_path(path);
47554763

4756-
ret = remove_from_free_space_tree(trans, extent_key.objectid,
4757-
num_bytes);
4758-
if (ret)
4759-
return ret;
4760-
4761-
ret = btrfs_update_block_group(trans, extent_key.objectid,
4762-
fs_info->nodesize, true);
4763-
if (ret) { /* -ENOENT, logic error */
4764-
ASSERT(!ret);
4765-
btrfs_err(fs_info, "update block group failed for %llu %llu",
4766-
extent_key.objectid, extent_key.offset);
4767-
return ret;
4768-
}
4769-
4770-
trace_btrfs_reserved_extent_alloc(fs_info, extent_key.objectid,
4771-
fs_info->nodesize);
4772-
return ret;
4764+
return alloc_reserved_extent(trans, node->bytenr, fs_info->nodesize);
47734765
}
47744766

47754767
int btrfs_alloc_reserved_file_extent(struct btrfs_trans_handle *trans,

0 commit comments

Comments
 (0)