mirror of
https://github.com/kdave/btrfs-progs
synced 2025-04-21 06:25:22 +00:00
btrfs-progs: sync block group item accessors from kernel
Signed-off-by: Qu Wenruo <wqu@suse.com> Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
parent
2a1823875c
commit
877f512c55
@ -5242,7 +5242,7 @@ btrfs_new_block_group_record(struct extent_buffer *leaf, struct btrfs_key *key,
|
||||
rec->offset = key->offset;
|
||||
|
||||
ptr = btrfs_item_ptr(leaf, slot, struct btrfs_block_group_item);
|
||||
rec->flags = btrfs_disk_block_group_flags(leaf, ptr);
|
||||
rec->flags = btrfs_block_group_flags(leaf, ptr);
|
||||
|
||||
INIT_LIST_HEAD(&rec->list);
|
||||
|
||||
@ -9171,10 +9171,10 @@ again:
|
||||
if (!cache)
|
||||
break;
|
||||
start = cache->key.objectid + cache->key.offset;
|
||||
btrfs_set_block_group_used(&bgi, cache->used);
|
||||
btrfs_set_block_group_chunk_objectid(&bgi,
|
||||
btrfs_set_stack_block_group_used(&bgi, cache->used);
|
||||
btrfs_set_stack_block_group_chunk_objectid(&bgi,
|
||||
BTRFS_FIRST_CHUNK_TREE_OBJECTID);
|
||||
btrfs_set_block_group_flags(&bgi, cache->flags);
|
||||
btrfs_set_stack_block_group_flags(&bgi, cache->flags);
|
||||
ret = btrfs_insert_item(trans, fs_info->extent_root,
|
||||
&cache->key, &bgi, sizeof(bgi));
|
||||
if (ret) {
|
||||
|
@ -301,7 +301,7 @@ static int modify_block_groups_cache(struct btrfs_fs_info *fs_info, u64 flags,
|
||||
bi = btrfs_item_ptr(eb, slot, struct btrfs_block_group_item);
|
||||
read_extent_buffer(eb, &bg_item, (unsigned long)bi,
|
||||
sizeof(bg_item));
|
||||
if (btrfs_block_group_flags(&bg_item) & flags)
|
||||
if (btrfs_stack_block_group_flags(&bg_item) & flags)
|
||||
modify_block_group_cache(fs_info, bg_cache, cache);
|
||||
|
||||
ret = btrfs_next_item(root, &path);
|
||||
@ -460,7 +460,7 @@ static int is_chunk_almost_full(struct btrfs_fs_info *fs_info, u64 start)
|
||||
total = key.offset;
|
||||
bi = btrfs_item_ptr(eb, slot, struct btrfs_block_group_item);
|
||||
read_extent_buffer(eb, &bg_item, (unsigned long)bi, sizeof(bg_item));
|
||||
used = btrfs_block_group_used(&bg_item);
|
||||
used = btrfs_stack_block_group_used(&bg_item);
|
||||
|
||||
/*
|
||||
* if the free space in the chunk is less than %10 of total,
|
||||
@ -3561,8 +3561,8 @@ static int check_block_group_item(struct btrfs_fs_info *fs_info,
|
||||
btrfs_item_key_to_cpu(eb, &bg_key, slot);
|
||||
bi = btrfs_item_ptr(eb, slot, struct btrfs_block_group_item);
|
||||
read_extent_buffer(eb, &bg_item, (unsigned long)bi, sizeof(bg_item));
|
||||
used = btrfs_block_group_used(&bg_item);
|
||||
bg_flags = btrfs_block_group_flags(&bg_item);
|
||||
used = btrfs_stack_block_group_used(&bg_item);
|
||||
bg_flags = btrfs_stack_block_group_flags(&bg_item);
|
||||
|
||||
chunk_key.objectid = BTRFS_FIRST_CHUNK_TREE_OBJECTID;
|
||||
chunk_key.type = BTRFS_CHUNK_ITEM_KEY;
|
||||
@ -4559,11 +4559,11 @@ static int check_chunk_item(struct btrfs_fs_info *fs_info,
|
||||
struct btrfs_block_group_item);
|
||||
read_extent_buffer(leaf, &bg_item, (unsigned long)bi,
|
||||
sizeof(bg_item));
|
||||
if (btrfs_block_group_flags(&bg_item) != type) {
|
||||
if (btrfs_stack_block_group_flags(&bg_item) != type) {
|
||||
error(
|
||||
"chunk[%llu %llu) related block group item flags mismatch, wanted: %llu, have: %llu",
|
||||
chunk_key.offset, chunk_end, type,
|
||||
btrfs_block_group_flags(&bg_item));
|
||||
btrfs_stack_block_group_flags(&bg_item));
|
||||
err |= REFERENCER_MISSING;
|
||||
}
|
||||
}
|
||||
|
@ -635,12 +635,12 @@ bg_check:
|
||||
l = path.nodes[0];
|
||||
slot = path.slots[0];
|
||||
bg_ptr = btrfs_item_ptr(l, slot, struct btrfs_block_group_item);
|
||||
if (chunk->type_flags != btrfs_disk_block_group_flags(l, bg_ptr)) {
|
||||
if (chunk->type_flags != btrfs_block_group_flags(l, bg_ptr)) {
|
||||
if (rc->verbose)
|
||||
fprintf(stderr,
|
||||
"Chunk[%llu, %llu]'s type(%llu) is different with Block Group's type(%llu)\n",
|
||||
chunk->offset, chunk->length, chunk->type_flags,
|
||||
btrfs_disk_block_group_flags(l, bg_ptr));
|
||||
btrfs_block_group_flags(l, bg_ptr));
|
||||
btrfs_release_path(&path);
|
||||
return -ENOENT;
|
||||
}
|
||||
@ -1358,9 +1358,9 @@ static int __insert_block_group(struct btrfs_trans_handle *trans,
|
||||
struct btrfs_key key;
|
||||
int ret = 0;
|
||||
|
||||
btrfs_set_block_group_used(&bg_item, used);
|
||||
btrfs_set_block_group_chunk_objectid(&bg_item, used);
|
||||
btrfs_set_block_group_flags(&bg_item, chunk_rec->type_flags);
|
||||
btrfs_set_stack_block_group_used(&bg_item, used);
|
||||
btrfs_set_stack_block_group_chunk_objectid(&bg_item, used);
|
||||
btrfs_set_stack_block_group_flags(&bg_item, chunk_rec->type_flags);
|
||||
key.objectid = chunk_rec->offset;
|
||||
key.type = BTRFS_BLOCK_GROUP_ITEM_KEY;
|
||||
key.offset = chunk_rec->length;
|
||||
|
@ -679,9 +679,9 @@ static void insert_temp_block_group(struct extent_buffer *buf,
|
||||
btrfs_set_item_offset(buf, btrfs_item_nr(*slot), *itemoff);
|
||||
btrfs_set_item_size(buf, btrfs_item_nr(*slot), sizeof(bgi));
|
||||
|
||||
btrfs_set_block_group_flags(&bgi, flag);
|
||||
btrfs_set_block_group_used(&bgi, used);
|
||||
btrfs_set_block_group_chunk_objectid(&bgi,
|
||||
btrfs_set_stack_block_group_flags(&bgi, flag);
|
||||
btrfs_set_stack_block_group_used(&bgi, used);
|
||||
btrfs_set_stack_block_group_chunk_objectid(&bgi,
|
||||
BTRFS_FIRST_CHUNK_TREE_OBJECTID);
|
||||
write_extent_buffer(buf, &bgi, btrfs_item_ptr_offset(buf, *slot),
|
||||
sizeof(bgi));
|
||||
|
12
ctree.h
12
ctree.h
@ -1639,18 +1639,18 @@ static inline void btrfs_set_stripe_devid_nr(struct extent_buffer *eb,
|
||||
}
|
||||
|
||||
/* struct btrfs_block_group_item */
|
||||
BTRFS_SETGET_STACK_FUNCS(block_group_used, struct btrfs_block_group_item,
|
||||
BTRFS_SETGET_STACK_FUNCS(stack_block_group_used, struct btrfs_block_group_item,
|
||||
used, 64);
|
||||
BTRFS_SETGET_FUNCS(disk_block_group_used, struct btrfs_block_group_item,
|
||||
BTRFS_SETGET_FUNCS(block_group_used, struct btrfs_block_group_item,
|
||||
used, 64);
|
||||
BTRFS_SETGET_STACK_FUNCS(block_group_chunk_objectid,
|
||||
BTRFS_SETGET_STACK_FUNCS(stack_block_group_chunk_objectid,
|
||||
struct btrfs_block_group_item, chunk_objectid, 64);
|
||||
|
||||
BTRFS_SETGET_FUNCS(disk_block_group_chunk_objectid,
|
||||
BTRFS_SETGET_FUNCS(block_group_chunk_objectid,
|
||||
struct btrfs_block_group_item, chunk_objectid, 64);
|
||||
BTRFS_SETGET_FUNCS(disk_block_group_flags,
|
||||
BTRFS_SETGET_FUNCS(block_group_flags,
|
||||
struct btrfs_block_group_item, flags, 64);
|
||||
BTRFS_SETGET_STACK_FUNCS(block_group_flags,
|
||||
BTRFS_SETGET_STACK_FUNCS(stack_block_group_flags,
|
||||
struct btrfs_block_group_item, flags, 64);
|
||||
|
||||
/* struct btrfs_free_space_info */
|
||||
|
@ -1541,9 +1541,10 @@ static int write_one_cache_group(struct btrfs_trans_handle *trans,
|
||||
|
||||
leaf = path->nodes[0];
|
||||
bi = btrfs_item_ptr_offset(leaf, path->slots[0]);
|
||||
btrfs_set_block_group_used(&bgi, cache->used);
|
||||
btrfs_set_block_group_flags(&bgi, cache->flags);
|
||||
btrfs_set_block_group_chunk_objectid(&bgi, BTRFS_FIRST_CHUNK_TREE_OBJECTID);
|
||||
btrfs_set_stack_block_group_used(&bgi, cache->used);
|
||||
btrfs_set_stack_block_group_flags(&bgi, cache->flags);
|
||||
btrfs_set_stack_block_group_chunk_objectid(&bgi,
|
||||
BTRFS_FIRST_CHUNK_TREE_OBJECTID);
|
||||
write_extent_buffer(leaf, &bgi, bi, sizeof(bgi));
|
||||
btrfs_mark_buffer_dirty(leaf);
|
||||
btrfs_release_path(path);
|
||||
@ -2657,8 +2658,8 @@ static int read_one_block_group(struct btrfs_fs_info *fs_info,
|
||||
memcpy(&cache->key, &key, sizeof(key));
|
||||
cache->cached = 0;
|
||||
cache->pinned = 0;
|
||||
cache->flags = btrfs_block_group_flags(&bgi);
|
||||
cache->used = btrfs_block_group_used(&bgi);
|
||||
cache->flags = btrfs_stack_block_group_flags(&bgi);
|
||||
cache->used = btrfs_stack_block_group_used(&bgi);
|
||||
INIT_LIST_HEAD(&cache->dirty_list);
|
||||
|
||||
set_avail_alloc_bits(fs_info, cache->flags);
|
||||
@ -2764,9 +2765,9 @@ int btrfs_make_block_group(struct btrfs_trans_handle *trans,
|
||||
|
||||
cache = btrfs_add_block_group(fs_info, bytes_used, type, chunk_offset,
|
||||
size);
|
||||
btrfs_set_block_group_used(&bgi, cache->used);
|
||||
btrfs_set_block_group_flags(&bgi, cache->flags);
|
||||
btrfs_set_block_group_chunk_objectid(&bgi,
|
||||
btrfs_set_stack_block_group_used(&bgi, cache->used);
|
||||
btrfs_set_stack_block_group_flags(&bgi, cache->flags);
|
||||
btrfs_set_stack_block_group_chunk_objectid(&bgi,
|
||||
BTRFS_FIRST_CHUNK_TREE_OBJECTID);
|
||||
ret = btrfs_insert_item(trans, extent_root, &cache->key, &bgi,
|
||||
sizeof(bgi));
|
||||
@ -2850,9 +2851,9 @@ int btrfs_make_block_groups(struct btrfs_trans_handle *trans,
|
||||
cache = btrfs_lookup_block_group(fs_info, cur_start);
|
||||
BUG_ON(!cache);
|
||||
|
||||
btrfs_set_block_group_used(&bgi, cache->used);
|
||||
btrfs_set_block_group_flags(&bgi, cache->flags);
|
||||
btrfs_set_block_group_chunk_objectid(&bgi,
|
||||
btrfs_set_stack_block_group_used(&bgi, cache->used);
|
||||
btrfs_set_stack_block_group_flags(&bgi, cache->flags);
|
||||
btrfs_set_stack_block_group_chunk_objectid(&bgi,
|
||||
BTRFS_FIRST_CHUNK_TREE_OBJECTID);
|
||||
ret = btrfs_insert_item(trans, extent_root, &cache->key, &bgi,
|
||||
sizeof(bgi));
|
||||
@ -3172,7 +3173,7 @@ int btrfs_free_block_group(struct btrfs_trans_handle *trans,
|
||||
|
||||
bgi = btrfs_item_ptr(path->nodes[0], path->slots[0],
|
||||
struct btrfs_block_group_item);
|
||||
if (btrfs_disk_block_group_used(path->nodes[0], bgi)) {
|
||||
if (btrfs_block_group_used(path->nodes[0], bgi)) {
|
||||
fprintf(stderr,
|
||||
"WARNING: block group [%llu,%llu) is not empty\n",
|
||||
bytenr, bytenr + len);
|
||||
|
@ -520,10 +520,10 @@ static int is_temp_block_group(struct extent_buffer *node,
|
||||
u64 data_profile, u64 meta_profile,
|
||||
u64 sys_profile)
|
||||
{
|
||||
u64 flag = btrfs_disk_block_group_flags(node, bgi);
|
||||
u64 flag = btrfs_block_group_flags(node, bgi);
|
||||
u64 flag_type = flag & BTRFS_BLOCK_GROUP_TYPE_MASK;
|
||||
u64 flag_profile = flag & BTRFS_BLOCK_GROUP_PROFILE_MASK;
|
||||
u64 used = btrfs_disk_block_group_used(node, bgi);
|
||||
u64 used = btrfs_block_group_used(node, bgi);
|
||||
|
||||
/*
|
||||
* Chunks meets all the following conditions is a temp chunk
|
||||
@ -642,8 +642,7 @@ static int cleanup_temp_chunks(struct btrfs_fs_info *fs_info,
|
||||
if (is_temp_block_group(path.nodes[0], bgi,
|
||||
data_profile, meta_profile,
|
||||
sys_profile)) {
|
||||
u64 flags = btrfs_disk_block_group_flags(path.nodes[0],
|
||||
bgi);
|
||||
u64 flags = btrfs_block_group_flags(path.nodes[0], bgi);
|
||||
|
||||
ret = btrfs_free_block_group(trans, fs_info,
|
||||
found_key.objectid, found_key.offset);
|
||||
|
@ -1019,10 +1019,10 @@ static void print_block_group_item(struct extent_buffer *eb,
|
||||
|
||||
read_extent_buffer(eb, &bg_item, (unsigned long)bgi, sizeof(bg_item));
|
||||
memset(flags_str, 0, sizeof(flags_str));
|
||||
bg_flags_to_str(btrfs_block_group_flags(&bg_item), flags_str);
|
||||
bg_flags_to_str(btrfs_stack_block_group_flags(&bg_item), flags_str);
|
||||
printf("\t\tblock group used %llu chunk_objectid %llu flags %s\n",
|
||||
(unsigned long long)btrfs_block_group_used(&bg_item),
|
||||
(unsigned long long)btrfs_block_group_chunk_objectid(&bg_item),
|
||||
btrfs_stack_block_group_used(&bg_item),
|
||||
btrfs_stack_block_group_chunk_objectid(&bg_item),
|
||||
flags_str);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user