mirror of
https://github.com/kdave/btrfs-progs
synced 2025-04-21 22:45:18 +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;
|
rec->offset = key->offset;
|
||||||
|
|
||||||
ptr = btrfs_item_ptr(leaf, slot, struct btrfs_block_group_item);
|
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);
|
INIT_LIST_HEAD(&rec->list);
|
||||||
|
|
||||||
@ -9171,10 +9171,10 @@ again:
|
|||||||
if (!cache)
|
if (!cache)
|
||||||
break;
|
break;
|
||||||
start = cache->key.objectid + cache->key.offset;
|
start = cache->key.objectid + cache->key.offset;
|
||||||
btrfs_set_block_group_used(&bgi, cache->used);
|
btrfs_set_stack_block_group_used(&bgi, cache->used);
|
||||||
btrfs_set_block_group_chunk_objectid(&bgi,
|
btrfs_set_stack_block_group_chunk_objectid(&bgi,
|
||||||
BTRFS_FIRST_CHUNK_TREE_OBJECTID);
|
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,
|
ret = btrfs_insert_item(trans, fs_info->extent_root,
|
||||||
&cache->key, &bgi, sizeof(bgi));
|
&cache->key, &bgi, sizeof(bgi));
|
||||||
if (ret) {
|
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);
|
bi = btrfs_item_ptr(eb, slot, struct btrfs_block_group_item);
|
||||||
read_extent_buffer(eb, &bg_item, (unsigned long)bi,
|
read_extent_buffer(eb, &bg_item, (unsigned long)bi,
|
||||||
sizeof(bg_item));
|
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);
|
modify_block_group_cache(fs_info, bg_cache, cache);
|
||||||
|
|
||||||
ret = btrfs_next_item(root, &path);
|
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;
|
total = key.offset;
|
||||||
bi = btrfs_item_ptr(eb, slot, struct btrfs_block_group_item);
|
bi = btrfs_item_ptr(eb, slot, struct btrfs_block_group_item);
|
||||||
read_extent_buffer(eb, &bg_item, (unsigned long)bi, sizeof(bg_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,
|
* 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);
|
btrfs_item_key_to_cpu(eb, &bg_key, slot);
|
||||||
bi = btrfs_item_ptr(eb, slot, struct btrfs_block_group_item);
|
bi = btrfs_item_ptr(eb, slot, struct btrfs_block_group_item);
|
||||||
read_extent_buffer(eb, &bg_item, (unsigned long)bi, sizeof(bg_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);
|
||||||
bg_flags = btrfs_block_group_flags(&bg_item);
|
bg_flags = btrfs_stack_block_group_flags(&bg_item);
|
||||||
|
|
||||||
chunk_key.objectid = BTRFS_FIRST_CHUNK_TREE_OBJECTID;
|
chunk_key.objectid = BTRFS_FIRST_CHUNK_TREE_OBJECTID;
|
||||||
chunk_key.type = BTRFS_CHUNK_ITEM_KEY;
|
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);
|
struct btrfs_block_group_item);
|
||||||
read_extent_buffer(leaf, &bg_item, (unsigned long)bi,
|
read_extent_buffer(leaf, &bg_item, (unsigned long)bi,
|
||||||
sizeof(bg_item));
|
sizeof(bg_item));
|
||||||
if (btrfs_block_group_flags(&bg_item) != type) {
|
if (btrfs_stack_block_group_flags(&bg_item) != type) {
|
||||||
error(
|
error(
|
||||||
"chunk[%llu %llu) related block group item flags mismatch, wanted: %llu, have: %llu",
|
"chunk[%llu %llu) related block group item flags mismatch, wanted: %llu, have: %llu",
|
||||||
chunk_key.offset, chunk_end, type,
|
chunk_key.offset, chunk_end, type,
|
||||||
btrfs_block_group_flags(&bg_item));
|
btrfs_stack_block_group_flags(&bg_item));
|
||||||
err |= REFERENCER_MISSING;
|
err |= REFERENCER_MISSING;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -635,12 +635,12 @@ bg_check:
|
|||||||
l = path.nodes[0];
|
l = path.nodes[0];
|
||||||
slot = path.slots[0];
|
slot = path.slots[0];
|
||||||
bg_ptr = btrfs_item_ptr(l, slot, struct btrfs_block_group_item);
|
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)
|
if (rc->verbose)
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"Chunk[%llu, %llu]'s type(%llu) is different with Block Group's type(%llu)\n",
|
"Chunk[%llu, %llu]'s type(%llu) is different with Block Group's type(%llu)\n",
|
||||||
chunk->offset, chunk->length, chunk->type_flags,
|
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);
|
btrfs_release_path(&path);
|
||||||
return -ENOENT;
|
return -ENOENT;
|
||||||
}
|
}
|
||||||
@ -1358,9 +1358,9 @@ static int __insert_block_group(struct btrfs_trans_handle *trans,
|
|||||||
struct btrfs_key key;
|
struct btrfs_key key;
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
|
||||||
btrfs_set_block_group_used(&bg_item, used);
|
btrfs_set_stack_block_group_used(&bg_item, used);
|
||||||
btrfs_set_block_group_chunk_objectid(&bg_item, used);
|
btrfs_set_stack_block_group_chunk_objectid(&bg_item, used);
|
||||||
btrfs_set_block_group_flags(&bg_item, chunk_rec->type_flags);
|
btrfs_set_stack_block_group_flags(&bg_item, chunk_rec->type_flags);
|
||||||
key.objectid = chunk_rec->offset;
|
key.objectid = chunk_rec->offset;
|
||||||
key.type = BTRFS_BLOCK_GROUP_ITEM_KEY;
|
key.type = BTRFS_BLOCK_GROUP_ITEM_KEY;
|
||||||
key.offset = chunk_rec->length;
|
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_offset(buf, btrfs_item_nr(*slot), *itemoff);
|
||||||
btrfs_set_item_size(buf, btrfs_item_nr(*slot), sizeof(bgi));
|
btrfs_set_item_size(buf, btrfs_item_nr(*slot), sizeof(bgi));
|
||||||
|
|
||||||
btrfs_set_block_group_flags(&bgi, flag);
|
btrfs_set_stack_block_group_flags(&bgi, flag);
|
||||||
btrfs_set_block_group_used(&bgi, used);
|
btrfs_set_stack_block_group_used(&bgi, used);
|
||||||
btrfs_set_block_group_chunk_objectid(&bgi,
|
btrfs_set_stack_block_group_chunk_objectid(&bgi,
|
||||||
BTRFS_FIRST_CHUNK_TREE_OBJECTID);
|
BTRFS_FIRST_CHUNK_TREE_OBJECTID);
|
||||||
write_extent_buffer(buf, &bgi, btrfs_item_ptr_offset(buf, *slot),
|
write_extent_buffer(buf, &bgi, btrfs_item_ptr_offset(buf, *slot),
|
||||||
sizeof(bgi));
|
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 */
|
/* 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);
|
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);
|
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);
|
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);
|
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);
|
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_block_group_item, flags, 64);
|
||||||
|
|
||||||
/* struct btrfs_free_space_info */
|
/* struct btrfs_free_space_info */
|
||||||
|
@ -1541,9 +1541,10 @@ static int write_one_cache_group(struct btrfs_trans_handle *trans,
|
|||||||
|
|
||||||
leaf = path->nodes[0];
|
leaf = path->nodes[0];
|
||||||
bi = btrfs_item_ptr_offset(leaf, path->slots[0]);
|
bi = btrfs_item_ptr_offset(leaf, path->slots[0]);
|
||||||
btrfs_set_block_group_used(&bgi, cache->used);
|
btrfs_set_stack_block_group_used(&bgi, cache->used);
|
||||||
btrfs_set_block_group_flags(&bgi, cache->flags);
|
btrfs_set_stack_block_group_flags(&bgi, cache->flags);
|
||||||
btrfs_set_block_group_chunk_objectid(&bgi, BTRFS_FIRST_CHUNK_TREE_OBJECTID);
|
btrfs_set_stack_block_group_chunk_objectid(&bgi,
|
||||||
|
BTRFS_FIRST_CHUNK_TREE_OBJECTID);
|
||||||
write_extent_buffer(leaf, &bgi, bi, sizeof(bgi));
|
write_extent_buffer(leaf, &bgi, bi, sizeof(bgi));
|
||||||
btrfs_mark_buffer_dirty(leaf);
|
btrfs_mark_buffer_dirty(leaf);
|
||||||
btrfs_release_path(path);
|
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));
|
memcpy(&cache->key, &key, sizeof(key));
|
||||||
cache->cached = 0;
|
cache->cached = 0;
|
||||||
cache->pinned = 0;
|
cache->pinned = 0;
|
||||||
cache->flags = btrfs_block_group_flags(&bgi);
|
cache->flags = btrfs_stack_block_group_flags(&bgi);
|
||||||
cache->used = btrfs_block_group_used(&bgi);
|
cache->used = btrfs_stack_block_group_used(&bgi);
|
||||||
INIT_LIST_HEAD(&cache->dirty_list);
|
INIT_LIST_HEAD(&cache->dirty_list);
|
||||||
|
|
||||||
set_avail_alloc_bits(fs_info, cache->flags);
|
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,
|
cache = btrfs_add_block_group(fs_info, bytes_used, type, chunk_offset,
|
||||||
size);
|
size);
|
||||||
btrfs_set_block_group_used(&bgi, cache->used);
|
btrfs_set_stack_block_group_used(&bgi, cache->used);
|
||||||
btrfs_set_block_group_flags(&bgi, cache->flags);
|
btrfs_set_stack_block_group_flags(&bgi, cache->flags);
|
||||||
btrfs_set_block_group_chunk_objectid(&bgi,
|
btrfs_set_stack_block_group_chunk_objectid(&bgi,
|
||||||
BTRFS_FIRST_CHUNK_TREE_OBJECTID);
|
BTRFS_FIRST_CHUNK_TREE_OBJECTID);
|
||||||
ret = btrfs_insert_item(trans, extent_root, &cache->key, &bgi,
|
ret = btrfs_insert_item(trans, extent_root, &cache->key, &bgi,
|
||||||
sizeof(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);
|
cache = btrfs_lookup_block_group(fs_info, cur_start);
|
||||||
BUG_ON(!cache);
|
BUG_ON(!cache);
|
||||||
|
|
||||||
btrfs_set_block_group_used(&bgi, cache->used);
|
btrfs_set_stack_block_group_used(&bgi, cache->used);
|
||||||
btrfs_set_block_group_flags(&bgi, cache->flags);
|
btrfs_set_stack_block_group_flags(&bgi, cache->flags);
|
||||||
btrfs_set_block_group_chunk_objectid(&bgi,
|
btrfs_set_stack_block_group_chunk_objectid(&bgi,
|
||||||
BTRFS_FIRST_CHUNK_TREE_OBJECTID);
|
BTRFS_FIRST_CHUNK_TREE_OBJECTID);
|
||||||
ret = btrfs_insert_item(trans, extent_root, &cache->key, &bgi,
|
ret = btrfs_insert_item(trans, extent_root, &cache->key, &bgi,
|
||||||
sizeof(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],
|
bgi = btrfs_item_ptr(path->nodes[0], path->slots[0],
|
||||||
struct btrfs_block_group_item);
|
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,
|
fprintf(stderr,
|
||||||
"WARNING: block group [%llu,%llu) is not empty\n",
|
"WARNING: block group [%llu,%llu) is not empty\n",
|
||||||
bytenr, bytenr + len);
|
bytenr, bytenr + len);
|
||||||
|
@ -520,10 +520,10 @@ static int is_temp_block_group(struct extent_buffer *node,
|
|||||||
u64 data_profile, u64 meta_profile,
|
u64 data_profile, u64 meta_profile,
|
||||||
u64 sys_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_type = flag & BTRFS_BLOCK_GROUP_TYPE_MASK;
|
||||||
u64 flag_profile = flag & BTRFS_BLOCK_GROUP_PROFILE_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
|
* 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,
|
if (is_temp_block_group(path.nodes[0], bgi,
|
||||||
data_profile, meta_profile,
|
data_profile, meta_profile,
|
||||||
sys_profile)) {
|
sys_profile)) {
|
||||||
u64 flags = btrfs_disk_block_group_flags(path.nodes[0],
|
u64 flags = btrfs_block_group_flags(path.nodes[0], bgi);
|
||||||
bgi);
|
|
||||||
|
|
||||||
ret = btrfs_free_block_group(trans, fs_info,
|
ret = btrfs_free_block_group(trans, fs_info,
|
||||||
found_key.objectid, found_key.offset);
|
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));
|
read_extent_buffer(eb, &bg_item, (unsigned long)bgi, sizeof(bg_item));
|
||||||
memset(flags_str, 0, sizeof(flags_str));
|
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",
|
printf("\t\tblock group used %llu chunk_objectid %llu flags %s\n",
|
||||||
(unsigned long long)btrfs_block_group_used(&bg_item),
|
btrfs_stack_block_group_used(&bg_item),
|
||||||
(unsigned long long)btrfs_block_group_chunk_objectid(&bg_item),
|
btrfs_stack_block_group_chunk_objectid(&bg_item),
|
||||||
flags_str);
|
flags_str);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user