[PATCH v2 08/10] btrfs-progs: add add_block_group_free_space helper
From: Josef Bacik <josef@toxicpanda.com>
Date: 2021-08-23 20:15:14
Subsystem:
the rest · Maintainer:
Linus Torvalds
This exists in the kernel free-space-tree.c but not in progs. We need it to generate the free space items for new block groups, which is needed when we start creating the free space tree in make_btrfs(). Signed-off-by: Josef Bacik <josef@toxicpanda.com> --- kernel-shared/extent-tree.c | 2 ++ kernel-shared/free-space-tree.c | 26 ++++++++++++++++++++++++++ kernel-shared/free-space-tree.h | 2 ++ 3 files changed, 30 insertions(+)
diff --git a/kernel-shared/extent-tree.c b/kernel-shared/extent-tree.c
index 056a9256..b5b43c10 100644
--- a/kernel-shared/extent-tree.c
+++ b/kernel-shared/extent-tree.c@@ -2816,6 +2816,8 @@ int btrfs_make_block_group(struct btrfs_trans_handle *trans, ret = btrfs_insert_item(trans, extent_root, &key, &bgi, sizeof(bgi)); BUG_ON(ret); + add_block_group_free_space(trans, cache); + return 0; }
diff --git a/kernel-shared/free-space-tree.c b/kernel-shared/free-space-tree.c
index 7f589dfe..1e127e31 100644
--- a/kernel-shared/free-space-tree.c
+++ b/kernel-shared/free-space-tree.c@@ -986,6 +986,32 @@ out: return ret; } +int add_block_group_free_space(struct btrfs_trans_handle *trans, + struct btrfs_block_group *block_group) +{ + struct btrfs_path *path; + int ret; + + if (!btrfs_fs_compat_ro(trans->fs_info, FREE_SPACE_TREE)) + return 0; + + path = btrfs_alloc_path(); + if (!path) + return -ENOMEM; + + ret = add_new_free_space_info(trans, block_group, path); + if (ret) + goto out; + ret = __add_to_free_space_tree(trans, block_group, path, + block_group->start, + block_group->length); +out: + btrfs_free_path(path); + if (ret) + btrfs_abort_transaction(trans, ret); + return ret; +} + int populate_free_space_tree(struct btrfs_trans_handle *trans, struct btrfs_block_group *block_group) {
diff --git a/kernel-shared/free-space-tree.h b/kernel-shared/free-space-tree.h
index 3d32e167..4f6aa5fc 100644
--- a/kernel-shared/free-space-tree.h
+++ b/kernel-shared/free-space-tree.h@@ -34,5 +34,7 @@ int add_to_free_space_tree(struct btrfs_trans_handle *trans, u64 start, int remove_from_free_space_tree(struct btrfs_trans_handle *trans, u64 start, u64 size); int btrfs_create_free_space_tree(struct btrfs_fs_info *info); +int add_block_group_free_space(struct btrfs_trans_handle *trans, + struct btrfs_block_group *block_group); #endif
--
2.26.3