Skip to content

Commit 97f4728

Browse files
adam900710kdave
authored andcommitted
btrfs: block-group: refactor how we insert a block group item
Currently the block group item insert is pretty straight forward, fill the block group item structure and insert it into extent tree. However the incoming skinny block group feature is going to change this, so this patch will refactor insertion into a new function, insert_block_group_item(), to make the incoming feature easier to add. Reviewed-by: Johannes Thumshirn <[email protected]> Signed-off-by: Qu Wenruo <[email protected]> Reviewed-by: David Sterba <[email protected]> Signed-off-by: David Sterba <[email protected]>
1 parent 7357623 commit 97f4728

File tree

1 file changed

+25
-16
lines changed

1 file changed

+25
-16
lines changed

fs/btrfs/block-group.c

Lines changed: 25 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2071,13 +2071,32 @@ int btrfs_read_block_groups(struct btrfs_fs_info *info)
20712071
return ret;
20722072
}
20732073

2074+
static int insert_block_group_item(struct btrfs_trans_handle *trans,
2075+
struct btrfs_block_group *block_group)
2076+
{
2077+
struct btrfs_fs_info *fs_info = trans->fs_info;
2078+
struct btrfs_block_group_item bgi;
2079+
struct btrfs_root *root;
2080+
struct btrfs_key key;
2081+
2082+
spin_lock(&block_group->lock);
2083+
btrfs_set_stack_block_group_used(&bgi, block_group->used);
2084+
btrfs_set_stack_block_group_chunk_objectid(&bgi,
2085+
BTRFS_FIRST_CHUNK_TREE_OBJECTID);
2086+
btrfs_set_stack_block_group_flags(&bgi, block_group->flags);
2087+
key.objectid = block_group->start;
2088+
key.type = BTRFS_BLOCK_GROUP_ITEM_KEY;
2089+
key.offset = block_group->length;
2090+
spin_unlock(&block_group->lock);
2091+
2092+
root = fs_info->extent_root;
2093+
return btrfs_insert_item(trans, root, &key, &bgi, sizeof(bgi));
2094+
}
2095+
20742096
void btrfs_create_pending_block_groups(struct btrfs_trans_handle *trans)
20752097
{
20762098
struct btrfs_fs_info *fs_info = trans->fs_info;
20772099
struct btrfs_block_group *block_group;
2078-
struct btrfs_root *extent_root = fs_info->extent_root;
2079-
struct btrfs_block_group_item item;
2080-
struct btrfs_key key;
20812100
int ret = 0;
20822101

20832102
if (!trans->can_flush_pending_bgs)
@@ -2090,21 +2109,11 @@ void btrfs_create_pending_block_groups(struct btrfs_trans_handle *trans)
20902109
if (ret)
20912110
goto next;
20922111

2093-
spin_lock(&block_group->lock);
2094-
btrfs_set_stack_block_group_used(&item, block_group->used);
2095-
btrfs_set_stack_block_group_chunk_objectid(&item,
2096-
BTRFS_FIRST_CHUNK_TREE_OBJECTID);
2097-
btrfs_set_stack_block_group_flags(&item, block_group->flags);
2098-
key.objectid = block_group->start;
2099-
key.type = BTRFS_BLOCK_GROUP_ITEM_KEY;
2100-
key.offset = block_group->length;
2101-
spin_unlock(&block_group->lock);
2102-
2103-
ret = btrfs_insert_item(trans, extent_root, &key, &item,
2104-
sizeof(item));
2112+
ret = insert_block_group_item(trans, block_group);
21052113
if (ret)
21062114
btrfs_abort_transaction(trans, ret);
2107-
ret = btrfs_finish_chunk_alloc(trans, key.objectid, key.offset);
2115+
ret = btrfs_finish_chunk_alloc(trans, block_group->start,
2116+
block_group->length);
21082117
if (ret)
21092118
btrfs_abort_transaction(trans, ret);
21102119
add_block_group_free_space(trans, block_group);

0 commit comments

Comments
 (0)