static int read_one_block_group(struct btrfs_fs_info *info,
struct btrfs_path *path,
+ const struct btrfs_key *key,
int need_clear)
{
struct extent_buffer *leaf = path->nodes[0];
struct btrfs_block_group_cache *cache;
struct btrfs_space_info *space_info;
- struct btrfs_key key;
struct btrfs_block_group_item bgi;
const bool mixed = btrfs_fs_incompat(info, MIXED_GROUPS);
int slot = path->slots[0];
int ret;
- btrfs_item_key_to_cpu(leaf, &key, slot);
- ASSERT(key.type == BTRFS_BLOCK_GROUP_ITEM_KEY);
+ ASSERT(key->type == BTRFS_BLOCK_GROUP_ITEM_KEY);
- cache = btrfs_create_block_group_cache(info, key.objectid, key.offset);
+ cache = btrfs_create_block_group_cache(info, key->objectid, key->offset);
if (!cache)
return -ENOMEM;
* are empty, and we can just add all the space in and be done with it.
* This saves us _a_lot_ of time, particularly in the full case.
*/
- if (key.offset == cache->used) {
+ if (key->offset == cache->used) {
cache->last_byte_to_unpin = (u64)-1;
cache->cached = BTRFS_CACHE_FINISHED;
btrfs_free_excluded_extents(cache);
} else if (cache->used == 0) {
cache->last_byte_to_unpin = (u64)-1;
cache->cached = BTRFS_CACHE_FINISHED;
- add_new_free_space(cache, key.objectid,
- key.objectid + key.offset);
+ add_new_free_space(cache, key->objectid,
+ key->objectid + key->offset);
btrfs_free_excluded_extents(cache);
}
goto error;
}
trace_btrfs_add_block_group(info, cache, 0);
- btrfs_update_space_info(info, cache->flags, key.offset,
+ btrfs_update_space_info(info, cache->flags, key->offset,
cache->used, cache->bytes_super, &space_info);
cache->space_info = space_info;
goto error;
btrfs_item_key_to_cpu(path->nodes[0], &key, path->slots[0]);
- ret = read_one_block_group(info, path, need_clear);
+ ret = read_one_block_group(info, path, &key, need_clear);
if (ret < 0)
goto error;
key.objectid += key.offset;