* [PATCH v2 0/4] btrfs-progs: Sync code for btrfs_block_group
@ 2020-05-01 6:52 Qu Wenruo
2020-05-01 6:52 ` [PATCH v2 1/4] btrfs-progs: Sync block group item accessors from kernel Qu Wenruo
` (4 more replies)
0 siblings, 5 replies; 6+ messages in thread
From: Qu Wenruo @ 2020-05-01 6:52 UTC (permalink / raw)
To: linux-btrfs
This patchset mostly make btrfs_block_group structure to sync with
kernel, providing the basis for later modification. (Hint: skinny bg
tree)
Changelog:
v2:
- Add a patch to sync the block group item accessors
Qu Wenruo (4):
btrfs-progs: Sync block group item accessors from kernel
btrfs-progs: Kill block_group_cache::key
btrfs-progs: Remove the unused btrfs_block_group_cache::cache
btrfs-progs: Rename btrfs_block_group_cache to btrfs_block_group
check/main.c | 51 +++----
check/mode-common.c | 4 +-
check/mode-lowmem.c | 22 +--
cmds/rescue-chunk-recover.c | 16 +--
convert/common.c | 6 +-
convert/main.c | 8 +-
convert/source-fs.c | 4 +-
ctree.h | 33 +++--
extent-tree.c | 234 ++++++++++++++++----------------
free-space-cache.c | 32 ++---
free-space-cache.h | 12 +-
image/main.c | 2 +-
kernel-shared/free-space-tree.c | 117 ++++++++--------
kernel-shared/free-space-tree.h | 6 +-
mkfs/main.c | 19 ++-
print-tree.c | 6 +-
transaction.h | 2 +-
volumes.h | 4 +-
18 files changed, 290 insertions(+), 288 deletions(-)
--
2.26.2
^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH v2 1/4] btrfs-progs: Sync block group item accessors from kernel
2020-05-01 6:52 [PATCH v2 0/4] btrfs-progs: Sync code for btrfs_block_group Qu Wenruo
@ 2020-05-01 6:52 ` Qu Wenruo
2020-05-01 6:52 ` [PATCH v2 2/4] btrfs-progs: Kill block_group_cache::key Qu Wenruo
` (3 subsequent siblings)
4 siblings, 0 replies; 6+ messages in thread
From: Qu Wenruo @ 2020-05-01 6:52 UTC (permalink / raw)
To: linux-btrfs
Signed-off-by: Qu Wenruo <wqu@suse.com>
---
check/main.c | 8 ++++----
check/mode-lowmem.c | 12 ++++++------
cmds/rescue-chunk-recover.c | 10 +++++-----
convert/common.c | 6 +++---
ctree.h | 12 ++++++------
extent-tree.c | 25 +++++++++++++------------
mkfs/main.c | 7 +++----
print-tree.c | 6 +++---
8 files changed, 43 insertions(+), 43 deletions(-)
diff --git a/check/main.c b/check/main.c
index a41117fe79f9..84c855eb0f65 100644
--- a/check/main.c
+++ b/check/main.c
@@ -5232,7 +5232,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);
@@ -9161,10 +9161,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) {
diff --git a/check/mode-lowmem.c b/check/mode-lowmem.c
index 96b6e16f9018..91be09614c51 100644
--- a/check/mode-lowmem.c
+++ b/check/mode-lowmem.c
@@ -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;
}
}
diff --git a/cmds/rescue-chunk-recover.c b/cmds/rescue-chunk-recover.c
index a13acc015d11..24c25b4d56a4 100644
--- a/cmds/rescue-chunk-recover.c
+++ b/cmds/rescue-chunk-recover.c
@@ -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;
diff --git a/convert/common.c b/convert/common.c
index 3cb2d9d44881..0a7d2e20256a 100644
--- a/convert/common.c
+++ b/convert/common.c
@@ -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));
diff --git a/ctree.h b/ctree.h
index 9d69fa946079..62b77babad6e 100644
--- a/ctree.h
+++ b/ctree.h
@@ -1640,18 +1640,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 */
diff --git a/extent-tree.c b/extent-tree.c
index 4af8f4ba8a47..cb7691e7c101 100644
--- a/extent-tree.c
+++ b/extent-tree.c
@@ -1547,9 +1547,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);
@@ -2665,8 +2666,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);
@@ -2772,9 +2773,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));
@@ -2858,9 +2859,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));
@@ -3180,7 +3181,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);
diff --git a/mkfs/main.c b/mkfs/main.c
index 316ea82e45c6..b659c1cbb56b 100644
--- a/mkfs/main.c
+++ b/mkfs/main.c
@@ -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);
diff --git a/print-tree.c b/print-tree.c
index 0c63f6ca2325..27acadb22205 100644
--- a/print-tree.c
+++ b/print-tree.c
@@ -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);
}
--
2.26.2
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH v2 2/4] btrfs-progs: Kill block_group_cache::key
2020-05-01 6:52 [PATCH v2 0/4] btrfs-progs: Sync code for btrfs_block_group Qu Wenruo
2020-05-01 6:52 ` [PATCH v2 1/4] btrfs-progs: Sync block group item accessors from kernel Qu Wenruo
@ 2020-05-01 6:52 ` Qu Wenruo
2020-05-01 6:52 ` [PATCH v2 3/4] btrfs-progs: Remove the unused btrfs_block_group_cache::cache Qu Wenruo
` (2 subsequent siblings)
4 siblings, 0 replies; 6+ messages in thread
From: Qu Wenruo @ 2020-05-01 6:52 UTC (permalink / raw)
To: linux-btrfs
This would sync the code between kernel and btrfs-progs, and save at
least 1 byte for each btrfs_block_group_cache.
Signed-off-by: Qu Wenruo <wqu@suse.com>
---
check/main.c | 29 +++----
check/mode-common.c | 2 +-
check/mode-lowmem.c | 4 +-
cmds/rescue-chunk-recover.c | 4 +-
convert/main.c | 6 +-
convert/source-fs.c | 2 +-
ctree.h | 3 +-
extent-tree.c | 133 ++++++++++++++++----------------
free-space-cache.c | 22 +++---
kernel-shared/free-space-tree.c | 77 +++++++++---------
mkfs/main.c | 10 +--
volumes.h | 2 +-
12 files changed, 150 insertions(+), 144 deletions(-)
diff --git a/check/main.c b/check/main.c
index 84c855eb0f65..2610220e5b6d 100644
--- a/check/main.c
+++ b/check/main.c
@@ -5455,7 +5455,7 @@ static int check_cache_range(struct btrfs_root *root,
for (i = 0; i < BTRFS_SUPER_MIRROR_MAX; i++) {
bytenr = btrfs_sb_offset(i);
ret = btrfs_rmap_block(root->fs_info,
- cache->key.objectid, bytenr,
+ cache->start, bytenr,
&logical, &nr, &stripe_len);
if (ret)
return ret;
@@ -5547,7 +5547,7 @@ static int verify_space_cache(struct btrfs_root *root,
root = root->fs_info->extent_root;
- last = max_t(u64, cache->key.objectid, BTRFS_SUPER_INFO_OFFSET);
+ last = max_t(u64, cache->start, BTRFS_SUPER_INFO_OFFSET);
btrfs_init_path(&path);
key.objectid = last;
@@ -5569,7 +5569,7 @@ static int verify_space_cache(struct btrfs_root *root,
}
leaf = path.nodes[0];
btrfs_item_key_to_cpu(leaf, &key, path.slots[0]);
- if (key.objectid >= cache->key.offset + cache->key.objectid)
+ if (key.objectid >= cache->start + cache->length)
break;
if (key.type != BTRFS_EXTENT_ITEM_KEY &&
key.type != BTRFS_METADATA_ITEM_KEY) {
@@ -5597,10 +5597,9 @@ static int verify_space_cache(struct btrfs_root *root,
path.slots[0]++;
}
- if (last < cache->key.objectid + cache->key.offset)
+ if (last < cache->start + cache->length)
ret = check_cache_range(root, cache, last,
- cache->key.objectid +
- cache->key.offset - last);
+ cache->start + cache->length - last);
out:
btrfs_release_path(&path);
@@ -5628,7 +5627,7 @@ static int check_space_cache(struct btrfs_root *root)
if (!cache)
break;
- start = cache->key.objectid + cache->key.offset;
+ start = cache->start + cache->length;
if (!cache->free_space_ctl) {
if (btrfs_init_free_space_ctl(cache,
root->fs_info->sectorsize)) {
@@ -5669,7 +5668,7 @@ static int check_space_cache(struct btrfs_root *root)
ret = verify_space_cache(root, cache);
if (ret) {
fprintf(stderr, "cache appears valid but isn't %llu\n",
- cache->key.objectid);
+ cache->start);
error++;
}
}
@@ -8970,7 +8969,7 @@ static int reset_block_groups(struct btrfs_fs_info *fs_info)
if (!cache)
break;
cache->cached = 1;
- start = cache->key.objectid + cache->key.offset;
+ start = cache->start + cache->length;
}
btrfs_release_path(&path);
@@ -9156,17 +9155,21 @@ again:
while (1) {
struct btrfs_block_group_item bgi;
struct btrfs_block_group_cache *cache;
+ struct btrfs_key key;
cache = btrfs_lookup_first_block_group(fs_info, start);
if (!cache)
break;
- start = cache->key.objectid + cache->key.offset;
+ start = cache->start + cache->length;
btrfs_set_stack_block_group_used(&bgi, cache->used);
btrfs_set_stack_block_group_chunk_objectid(&bgi,
BTRFS_FIRST_CHUNK_TREE_OBJECTID);
btrfs_set_stack_block_group_flags(&bgi, cache->flags);
- ret = btrfs_insert_item(trans, fs_info->extent_root,
- &cache->key, &bgi, sizeof(bgi));
+ key.objectid = cache->start;
+ key.type = BTRFS_BLOCK_GROUP_ITEM_KEY;
+ key.offset = cache->length;
+ ret = btrfs_insert_item(trans, fs_info->extent_root, &key,
+ &bgi, sizeof(bgi));
if (ret) {
fprintf(stderr, "Error adding block group\n");
return ret;
@@ -9815,7 +9818,7 @@ static int clear_free_space_cache(struct btrfs_fs_info *fs_info)
ret = btrfs_clear_free_space_cache(fs_info, bg_cache);
if (ret < 0)
return ret;
- current = bg_cache->key.objectid + bg_cache->key.offset;
+ current = bg_cache->start + bg_cache->length;
}
/* Don't forget to set cache_generation to -1 */
diff --git a/check/mode-common.c b/check/mode-common.c
index 8fe1ea8eaeb4..73b2622dd674 100644
--- a/check/mode-common.c
+++ b/check/mode-common.c
@@ -601,7 +601,7 @@ void reset_cached_block_groups(struct btrfs_fs_info *fs_info)
break;
if (cache->cached)
cache->cached = 0;
- start = cache->key.objectid + cache->key.offset;
+ start = cache->start + cache->length;
}
}
diff --git a/check/mode-lowmem.c b/check/mode-lowmem.c
index 91be09614c51..b47963a46d80 100644
--- a/check/mode-lowmem.c
+++ b/check/mode-lowmem.c
@@ -242,8 +242,8 @@ static int modify_block_group_cache(struct btrfs_fs_info *fs_info,
struct btrfs_block_group_cache *block_group, int cache)
{
struct extent_io_tree *free_space_cache = &fs_info->free_space_cache;
- u64 start = block_group->key.objectid;
- u64 end = start + block_group->key.offset;
+ u64 start = block_group->start;
+ u64 end = start + block_group->length;
if (cache && !block_group->cached) {
block_group->cached = 1;
diff --git a/cmds/rescue-chunk-recover.c b/cmds/rescue-chunk-recover.c
index 24c25b4d56a4..101b32700b0d 100644
--- a/cmds/rescue-chunk-recover.c
+++ b/cmds/rescue-chunk-recover.c
@@ -1097,8 +1097,8 @@ static int block_group_free_all_extent(struct btrfs_trans_handle *trans,
if (!cache)
return -ENOENT;
- start = cache->key.objectid;
- end = start + cache->key.offset - 1;
+ start = cache->start;
+ end = start + cache->length - 1;
if (list_empty(&cache->dirty_list))
list_add_tail(&cache->dirty_list, &trans->dirty_bgs);
diff --git a/convert/main.c b/convert/main.c
index 86b208816127..62d839b7262c 100644
--- a/convert/main.c
+++ b/convert/main.c
@@ -300,13 +300,13 @@ static int create_image_file_range(struct btrfs_trans_handle *trans,
if (!(bg_cache->flags & BTRFS_BLOCK_GROUP_DATA)) {
error(
"data bytenr %llu is covered by non-data block group %llu flags 0x%llu",
- bytenr, bg_cache->key.objectid, bg_cache->flags);
+ bytenr, bg_cache->start, bg_cache->flags);
return -EINVAL;
}
/* The extent should never cross block group boundary */
- len = min_t(u64, len, bg_cache->key.objectid +
- bg_cache->key.offset - bytenr);
+ len = min_t(u64, len, bg_cache->start + bg_cache->length -
+ bytenr);
}
if (len != round_down(len, root->fs_info->sectorsize)) {
diff --git a/convert/source-fs.c b/convert/source-fs.c
index b11188e40c58..a4e49b774958 100644
--- a/convert/source-fs.c
+++ b/convert/source-fs.c
@@ -120,7 +120,7 @@ int block_iterate_proc(u64 disk_block, u64 file_block,
} else {
cache = btrfs_lookup_block_group(root->fs_info, bytenr);
BUG_ON(!cache);
- bytenr = cache->key.objectid + cache->key.offset;
+ bytenr = cache->start + cache->length;
}
idata->first_block = file_block;
diff --git a/ctree.h b/ctree.h
index 62b77babad6e..d12ed5d8af31 100644
--- a/ctree.h
+++ b/ctree.h
@@ -1106,9 +1106,10 @@ struct btrfs_space_info {
struct btrfs_block_group_cache {
struct cache_extent cache;
- struct btrfs_key key;
struct btrfs_space_info *space_info;
struct btrfs_free_space_ctl *free_space_ctl;
+ u64 start;
+ u64 length;
u64 used;
u64 bytes_super;
u64 pinned;
diff --git a/extent-tree.c b/extent-tree.c
index cb7691e7c101..aee859af5d98 100644
--- a/extent-tree.c
+++ b/extent-tree.c
@@ -67,7 +67,7 @@ static int remove_sb_from_cache(struct btrfs_root *root,
free_space_cache = &fs_info->free_space_cache;
for (i = 0; i < BTRFS_SUPER_MIRROR_MAX; i++) {
bytenr = btrfs_sb_offset(i);
- ret = btrfs_rmap_block(fs_info, cache->key.objectid, bytenr,
+ ret = btrfs_rmap_block(fs_info, cache->start, bytenr,
&logical, &nr, &stripe_len);
BUG_ON(ret);
while (nr--) {
@@ -105,7 +105,7 @@ static int cache_block_group(struct btrfs_root *root,
return -ENOMEM;
path->reada = READA_FORWARD;
- last = max_t(u64, block_group->key.objectid, BTRFS_SUPER_INFO_OFFSET);
+ last = max_t(u64, block_group->start, BTRFS_SUPER_INFO_OFFSET);
key.objectid = last;
key.offset = 0;
key.type = 0;
@@ -128,11 +128,10 @@ static int cache_block_group(struct btrfs_root *root,
}
}
btrfs_item_key_to_cpu(leaf, &key, slot);
- if (key.objectid < block_group->key.objectid) {
+ if (key.objectid < block_group->start) {
goto next;
}
- if (key.objectid >= block_group->key.objectid +
- block_group->key.offset) {
+ if (key.objectid >= block_group->start + block_group->length) {
break;
}
@@ -152,10 +151,8 @@ next:
path->slots[0]++;
}
- if (block_group->key.objectid +
- block_group->key.offset > last) {
- hole_size = block_group->key.objectid +
- block_group->key.offset - last;
+ if (block_group->start + block_group->length > last) {
+ hole_size = block_group->start + block_group->length - last;
set_extent_dirty(free_space_cache, last, last + hole_size - 1);
}
remove_sb_from_cache(root, block_group);
@@ -181,9 +178,9 @@ static int btrfs_add_block_group_cache(struct btrfs_fs_info *info,
parent = *p;
cache = rb_entry(parent, struct btrfs_block_group_cache,
cache_node);
- if (block_group->key.objectid < cache->key.objectid)
+ if (block_group->start < cache->start)
p = &(*p)->rb_left;
- else if (block_group->key.objectid > cache->key.objectid)
+ else if (block_group->start > cache->start)
p = &(*p)->rb_right;
else
return -EEXIST;
@@ -216,11 +213,11 @@ static struct btrfs_block_group_cache *block_group_cache_tree_search(
while (n) {
cache = rb_entry(n, struct btrfs_block_group_cache,
cache_node);
- end = cache->key.objectid + cache->key.offset - 1;
- start = cache->key.objectid;
+ end = cache->start + cache->length - 1;
+ start = cache->start;
if (bytenr < start) {
- if (next && (!ret || start < ret->key.objectid))
+ if (next && (!ret || start < ret->start))
ret = cache;
n = n->rb_left;
} else if (bytenr > start) {
@@ -281,7 +278,7 @@ again:
if (ret)
goto out;
- last = max(search_start, cache->key.objectid);
+ last = max(search_start, cache->start);
if (cache->ro || !block_group_bits(cache, data))
goto new_group;
@@ -297,7 +294,7 @@ again:
if (last - start < num) {
continue;
}
- if (start + num > cache->key.objectid + cache->key.offset) {
+ if (start + num > cache->start + cache->length) {
goto new_group;
}
*start_ret = start;
@@ -314,7 +311,7 @@ out:
return -ENOSPC;
new_group:
- last = cache->key.objectid + cache->key.offset;
+ last = cache->start + cache->length;
wrapped:
cache = btrfs_lookup_first_block_group(root->fs_info, last);
if (!cache) {
@@ -352,7 +349,7 @@ btrfs_find_block_group(struct btrfs_root *root, struct btrfs_block_group_cache
if (shint && !shint->ro && block_group_bits(shint, data)) {
used = shint->used;
if (used + shint->pinned <
- div_factor(shint->key.offset, factor)) {
+ div_factor(shint->length, factor)) {
return shint;
}
}
@@ -360,14 +357,14 @@ btrfs_find_block_group(struct btrfs_root *root, struct btrfs_block_group_cache
if (hint && !hint->ro && block_group_bits(hint, data)) {
used = hint->used;
if (used + hint->pinned <
- div_factor(hint->key.offset, factor)) {
+ div_factor(hint->length, factor)) {
return hint;
}
- last = hint->key.objectid + hint->key.offset;
+ last = hint->start + hint->length;
hint_last = last;
} else {
if (hint)
- hint_last = max(hint->key.objectid, search_start);
+ hint_last = max(hint->start , search_start);
else
hint_last = search_start;
@@ -379,15 +376,14 @@ again:
if (!cache)
break;
- last = cache->key.objectid + cache->key.offset;
+ last = cache->start + cache->length;
used = cache->used;
if (!cache->ro && block_group_bits(cache, data)) {
if (full_search)
- free_check = cache->key.offset;
+ free_check = cache->length;
else
- free_check = div_factor(cache->key.offset,
- factor);
+ free_check = div_factor(cache->length, factor);
if (used + cache->pinned < free_check) {
found_group = cache;
@@ -1539,8 +1535,13 @@ static int write_one_cache_group(struct btrfs_trans_handle *trans,
unsigned long bi;
struct btrfs_block_group_item bgi;
struct extent_buffer *leaf;
+ struct btrfs_key key;
+
+ key.objectid = cache->start;
+ key.type = BTRFS_BLOCK_GROUP_ITEM_KEY;
+ key.offset = cache->length;
- ret = btrfs_search_slot(trans, extent_root, &cache->key, path, 0, 1);
+ ret = btrfs_search_slot(trans, extent_root, &key, path, 0, 1);
if (ret < 0)
goto fail;
BUG_ON(ret);
@@ -1761,12 +1762,12 @@ static int update_block_group(struct btrfs_trans_handle *trans, u64 bytenr,
if (!cache) {
return -1;
}
- byte_in_group = bytenr - cache->key.objectid;
- WARN_ON(byte_in_group > cache->key.offset);
+ byte_in_group = bytenr - cache->start;
+ WARN_ON(byte_in_group > cache->length);
if (list_empty(&cache->dirty_list))
list_add_tail(&cache->dirty_list, &trans->dirty_bgs);
old_val = cache->used;
- num_bytes = min(total, cache->key.offset - byte_in_group);
+ num_bytes = min(total, cache->length- byte_in_group);
if (alloc) {
old_val += num_bytes;
@@ -1806,8 +1807,7 @@ static int update_pinned_extents(struct btrfs_fs_info *fs_info,
goto next;
}
WARN_ON(!cache);
- len = min(num, cache->key.offset -
- (bytenr - cache->key.objectid));
+ len = min(num, cache->length - (bytenr - cache->start));
if (pin) {
cache->pinned += len;
cache->space_info->bytes_pinned += len;
@@ -2219,9 +2219,8 @@ check_failed:
ins->offset = num_bytes;
if (ins->objectid + num_bytes >
- block_group->key.objectid + block_group->key.offset) {
- search_start = block_group->key.objectid +
- block_group->key.offset;
+ block_group->start + block_group->length) {
+ search_start = block_group->start + block_group->length;
goto new_group;
}
@@ -2258,11 +2257,11 @@ check_failed:
bg_cache = btrfs_lookup_block_group(info, ins->objectid);
if (!bg_cache)
goto no_bg_cache;
- bg_offset = ins->objectid - bg_cache->key.objectid;
+ bg_offset = ins->objectid - bg_cache->start;
search_start = round_up(
bg_offset + num_bytes, BTRFS_STRIPE_LEN) +
- bg_cache->key.objectid;
+ bg_cache->start;
goto new_group;
}
no_bg_cache:
@@ -2663,7 +2662,8 @@ static int read_one_block_group(struct btrfs_fs_info *fs_info,
return -ENOMEM;
read_extent_buffer(leaf, &bgi, btrfs_item_ptr_offset(leaf, slot),
sizeof(bgi));
- memcpy(&cache->key, &key, sizeof(key));
+ cache->start = key.objectid;
+ cache->length = key.offset;
cache->cached = 0;
cache->pinned = 0;
cache->flags = btrfs_stack_block_group_flags(&bgi);
@@ -2671,7 +2671,7 @@ static int read_one_block_group(struct btrfs_fs_info *fs_info,
INIT_LIST_HEAD(&cache->dirty_list);
set_avail_alloc_bits(fs_info, cache->flags);
- ret = btrfs_chunk_readonly(fs_info, cache->key.objectid);
+ ret = btrfs_chunk_readonly(fs_info, cache->start);
if (ret < 0) {
free(cache);
return ret;
@@ -2680,7 +2680,7 @@ static int read_one_block_group(struct btrfs_fs_info *fs_info,
cache->ro = 1;
exclude_super_stripes(fs_info, cache);
- ret = update_space_info(fs_info, cache->flags, cache->key.offset,
+ ret = update_space_info(fs_info, cache->flags, cache->length,
cache->used, &space_info);
if (ret < 0) {
free(cache);
@@ -2742,10 +2742,9 @@ btrfs_add_block_group(struct btrfs_fs_info *fs_info, u64 bytes_used, u64 type,
cache = kzalloc(sizeof(*cache), GFP_NOFS);
BUG_ON(!cache);
- cache->key.objectid = chunk_offset;
- cache->key.offset = size;
+ cache->start = chunk_offset;
+ cache->length = size;
- cache->key.type = BTRFS_BLOCK_GROUP_ITEM_KEY;
cache->used = bytes_used;
cache->flags = type;
INIT_LIST_HEAD(&cache->dirty_list);
@@ -2770,6 +2769,7 @@ int btrfs_make_block_group(struct btrfs_trans_handle *trans,
struct btrfs_root *extent_root = fs_info->extent_root;
struct btrfs_block_group_cache *cache;
struct btrfs_block_group_item bgi;
+ struct btrfs_key key;
cache = btrfs_add_block_group(fs_info, bytes_used, type, chunk_offset,
size);
@@ -2777,8 +2777,10 @@ int btrfs_make_block_group(struct btrfs_trans_handle *trans,
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));
+ key.objectid = cache->start;
+ key.type = BTRFS_BLOCK_GROUP_ITEM_KEY;
+ key.offset = cache->length;
+ ret = btrfs_insert_item(trans, extent_root, &key, &bgi, sizeof(bgi));
BUG_ON(ret);
return 0;
@@ -2837,9 +2839,8 @@ int btrfs_make_block_groups(struct btrfs_trans_handle *trans,
cache = kzalloc(sizeof(*cache), GFP_NOFS);
BUG_ON(!cache);
- cache->key.objectid = cur_start;
- cache->key.offset = group_size;
- cache->key.type = BTRFS_BLOCK_GROUP_ITEM_KEY;
+ cache->start = cur_start;
+ cache->length = group_size;
cache->used = 0;
cache->flags = group_type;
INIT_LIST_HEAD(&cache->dirty_list);
@@ -2855,6 +2856,7 @@ int btrfs_make_block_groups(struct btrfs_trans_handle *trans,
cur_start = 0;
while(cur_start < total_bytes) {
struct btrfs_block_group_item bgi;
+ struct btrfs_key key;
cache = btrfs_lookup_block_group(fs_info, cur_start);
BUG_ON(!cache);
@@ -2863,11 +2865,14 @@ int btrfs_make_block_groups(struct btrfs_trans_handle *trans,
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,
+ key.objectid = cache->start;
+ key.type = BTRFS_BLOCK_GROUP_ITEM_KEY;
+ key.offset = cache->length;
+ ret = btrfs_insert_item(trans, extent_root, &key, &bgi,
sizeof(bgi));
BUG_ON(ret);
- cur_start = cache->key.objectid + cache->key.offset;
+ cur_start = cache->start + cache->length;
}
return 0;
}
@@ -3259,7 +3264,7 @@ int btrfs_fix_block_accounting(struct btrfs_trans_handle *trans)
if (!cache)
break;
- start = cache->key.objectid + cache->key.offset;
+ start = cache->start + cache->length;
cache->used = 0;
cache->space_info->bytes_used = 0;
if (list_empty(&cache->dirty_list))
@@ -3545,8 +3550,8 @@ void free_excluded_extents(struct btrfs_fs_info *fs_info,
{
u64 start, end;
- start = cache->key.objectid;
- end = start + cache->key.offset - 1;
+ start = cache->start;
+ end = start + cache->length - 1;
clear_extent_bits(&fs_info->pinned_extents,
start, end, EXTENT_UPTODATE);
@@ -3560,19 +3565,17 @@ int exclude_super_stripes(struct btrfs_fs_info *fs_info,
int stripe_len;
int i, nr, ret;
- if (cache->key.objectid < BTRFS_SUPER_INFO_OFFSET) {
- stripe_len = BTRFS_SUPER_INFO_OFFSET - cache->key.objectid;
+ if (cache->start < BTRFS_SUPER_INFO_OFFSET) {
+ stripe_len = BTRFS_SUPER_INFO_OFFSET - cache->start;
cache->bytes_super += stripe_len;
- ret = add_excluded_extent(fs_info, cache->key.objectid,
- stripe_len);
+ ret = add_excluded_extent(fs_info, cache->start, stripe_len);
if (ret)
return ret;
}
for (i = 0; i < BTRFS_SUPER_MIRROR_MAX; i++) {
bytenr = btrfs_sb_offset(i);
- ret = btrfs_rmap_block(fs_info,
- cache->key.objectid, bytenr,
+ ret = btrfs_rmap_block(fs_info, cache->start, bytenr,
&logical, &nr, &stripe_len);
if (ret)
return ret;
@@ -3580,21 +3583,19 @@ int exclude_super_stripes(struct btrfs_fs_info *fs_info,
while (nr--) {
u64 start, len;
- if (logical[nr] >= cache->key.objectid +
- cache->key.offset)
+ if (logical[nr] >= cache->start + cache->length)
continue;
- if (logical[nr] + stripe_len <= cache->key.objectid)
+ if (logical[nr] + stripe_len <= cache->start)
continue;
start = logical[nr];
- if (start < cache->key.objectid) {
- start = cache->key.objectid;
+ if (start < cache->start) {
+ start = cache->start;
len = (logical[nr] + stripe_len) - start;
} else {
- len = min_t(u64, stripe_len,
- cache->key.objectid +
- cache->key.offset - start);
+ len = min_t(u64, stripe_len, cache->start +
+ cache->length - start);
}
cache->bytes_super += len;
diff --git a/free-space-cache.c b/free-space-cache.c
index b95cabadcbd8..1523dbed018a 100644
--- a/free-space-cache.c
+++ b/free-space-cache.c
@@ -446,15 +446,15 @@ int load_free_space_cache(struct btrfs_fs_info *fs_info,
return 0;
ret = __load_free_space_cache(fs_info->tree_root, ctl, path,
- block_group->key.objectid);
+ block_group->start);
btrfs_free_path(path);
- bg_free = block_group->key.offset - used - block_group->bytes_super;
+ bg_free = block_group->length - used - block_group->bytes_super;
diff = ctl->free_space - bg_free;
if (ret == 1 && diff) {
fprintf(stderr,
"block group %llu has wrong amount of free space, free space cache has %llu block group has %llu\n",
- block_group->key.objectid, ctl->free_space, bg_free);
+ block_group->start, ctl->free_space, bg_free);
__btrfs_remove_free_space_cache(ctl);
/*
* Due to btrfs_reserve_extent() can happen out of a
@@ -479,7 +479,7 @@ int load_free_space_cache(struct btrfs_fs_info *fs_info,
fprintf(stderr,
"failed to load free space cache for block group %llu\n",
- block_group->key.objectid);
+ block_group->start);
}
return ret;
@@ -797,7 +797,7 @@ int btrfs_init_free_space_ctl(struct btrfs_block_group_cache *block_group,
ctl->sectorsize = sectorsize;
ctl->unit = sectorsize;
- ctl->start = block_group->key.objectid;
+ ctl->start = block_group->start;
ctl->private = block_group;
block_group->free_space_ctl = ctl;
@@ -917,7 +917,7 @@ int btrfs_clear_free_space_cache(struct btrfs_fs_info *fs_info,
key.objectid = BTRFS_FREE_SPACE_OBJECTID;
key.type = 0;
- key.offset = bg->key.objectid;
+ key.offset = bg->start;
ret = btrfs_search_slot(trans, tree_root, &key, &path, -1, 1);
if (ret > 0) {
@@ -937,7 +937,7 @@ int btrfs_clear_free_space_cache(struct btrfs_fs_info *fs_info,
ret = btrfs_del_item(trans, tree_root, &path);
if (ret < 0) {
error("failed to remove free space header for block group %llu: %d",
- bg->key.objectid, ret);
+ bg->start, ret);
goto out;
}
btrfs_release_path(&path);
@@ -949,7 +949,7 @@ int btrfs_clear_free_space_cache(struct btrfs_fs_info *fs_info,
ret = btrfs_search_slot(trans, tree_root, &key, &path, -1, 1);
if (ret < 0) {
error("failed to locate free space cache extent for block group %llu: %d",
- bg->key.objectid, ret);
+ bg->start, ret);
goto out;
}
while (1) {
@@ -966,7 +966,7 @@ int btrfs_clear_free_space_cache(struct btrfs_fs_info *fs_info,
if (ret < 0) {
error(
"failed to locate free space cache extent for block group %llu: %d",
- bg->key.objectid, ret);
+ bg->start, ret);
goto out;
}
node = path.nodes[0];
@@ -1005,14 +1005,14 @@ int btrfs_clear_free_space_cache(struct btrfs_fs_info *fs_info,
if (ret < 0) {
error(
"failed to locate free space cache inode %llu for block group %llu: %d",
- ino, bg->key.objectid, ret);
+ ino, bg->start, ret);
goto out;
}
ret = btrfs_del_item(trans, tree_root, &path);
if (ret < 0) {
error(
"failed to delete free space cache inode %llu for block group %llu: %d",
- ino, bg->key.objectid, ret);
+ ino, bg->start, ret);
}
out:
btrfs_release_path(&path);
diff --git a/kernel-shared/free-space-tree.c b/kernel-shared/free-space-tree.c
index d9f2e92bb894..6ed5b76a03d9 100644
--- a/kernel-shared/free-space-tree.c
+++ b/kernel-shared/free-space-tree.c
@@ -35,9 +35,9 @@ search_free_space_info(struct btrfs_trans_handle *trans,
struct btrfs_key key;
int ret;
- key.objectid = block_group->key.objectid;
+ key.objectid = block_group->start;
key.type = BTRFS_FREE_SPACE_INFO_KEY;
- key.offset = block_group->key.offset;
+ key.offset = block_group->length;
ret = btrfs_search_slot(trans, root, &key, path, 0, cow);
if (ret < 0)
@@ -109,9 +109,9 @@ static int add_new_free_space_info(struct btrfs_trans_handle *trans,
struct extent_buffer *leaf;
int ret;
- key.objectid = block_group->key.objectid;
+ key.objectid = block_group->start;
key.type = BTRFS_FREE_SPACE_INFO_KEY;
- key.offset = block_group->key.offset;
+ key.offset = block_group->length;
ret = btrfs_insert_empty_item(trans, root, path, &key, sizeof(*info));
if (ret)
@@ -192,7 +192,7 @@ static int convert_free_space_to_bitmaps(struct btrfs_trans_handle *trans,
int done = 0, nr;
int ret;
- bitmap_size = free_space_bitmap_size(block_group->key.offset,
+ bitmap_size = free_space_bitmap_size(block_group->length,
fs_info->sectorsize);
bitmap = alloc_bitmap(bitmap_size);
if (!bitmap) {
@@ -200,8 +200,8 @@ static int convert_free_space_to_bitmaps(struct btrfs_trans_handle *trans,
goto out;
}
- start = block_group->key.objectid;
- end = block_group->key.objectid + block_group->key.offset;
+ start = block_group->start;
+ end = block_group->start + block_group->length;
key.objectid = end - 1;
key.type = (u8)-1;
@@ -219,8 +219,8 @@ static int convert_free_space_to_bitmaps(struct btrfs_trans_handle *trans,
btrfs_item_key_to_cpu(leaf, &found_key, path->slots[0] - 1);
if (found_key.type == BTRFS_FREE_SPACE_INFO_KEY) {
- ASSERT(found_key.objectid == block_group->key.objectid);
- ASSERT(found_key.offset == block_group->key.offset);
+ ASSERT(found_key.objectid == block_group->start);
+ ASSERT(found_key.offset == block_group->length);
done = 1;
break;
} else if (found_key.type == BTRFS_FREE_SPACE_EXTENT_KEY) {
@@ -266,7 +266,7 @@ static int convert_free_space_to_bitmaps(struct btrfs_trans_handle *trans,
if (extent_count != expected_extent_count) {
fprintf(stderr,
"incorrect extent count for %llu; counted %u, expected %u",
- block_group->key.objectid, extent_count,
+ block_group->start, extent_count,
expected_extent_count);
ASSERT(0);
ret = -EIO;
@@ -330,7 +330,7 @@ static int convert_free_space_to_extents(struct btrfs_trans_handle *trans,
int done = 0, nr;
int ret;
- bitmap_size = free_space_bitmap_size(block_group->key.offset,
+ bitmap_size = free_space_bitmap_size(block_group->start,
fs_info->sectorsize);
bitmap = alloc_bitmap(bitmap_size);
if (!bitmap) {
@@ -338,8 +338,8 @@ static int convert_free_space_to_extents(struct btrfs_trans_handle *trans,
goto out;
}
- start = block_group->key.objectid;
- end = block_group->key.objectid + block_group->key.offset;
+ start = block_group->start;
+ end = block_group->start + block_group->length;
key.objectid = end - 1;
key.type = (u8)-1;
@@ -357,8 +357,8 @@ static int convert_free_space_to_extents(struct btrfs_trans_handle *trans,
btrfs_item_key_to_cpu(leaf, &found_key, path->slots[0] - 1);
if (found_key.type == BTRFS_FREE_SPACE_INFO_KEY) {
- ASSERT(found_key.objectid == block_group->key.objectid);
- ASSERT(found_key.offset == block_group->key.offset);
+ ASSERT(found_key.objectid == block_group->start);
+ ASSERT(found_key.offset == block_group->length);
done = 1;
break;
} else if (found_key.type == BTRFS_FREE_SPACE_BITMAP_KEY) {
@@ -407,7 +407,7 @@ static int convert_free_space_to_extents(struct btrfs_trans_handle *trans,
btrfs_mark_buffer_dirty(leaf);
btrfs_release_path(path);
- nrbits = div_u64(block_group->key.offset, fs_info->sectorsize);
+ nrbits = div_u64(block_group->length, fs_info->sectorsize);
start_bit = find_next_bit_le(bitmap, nrbits, 0);
while (start_bit < nrbits) {
@@ -431,7 +431,7 @@ static int convert_free_space_to_extents(struct btrfs_trans_handle *trans,
if (extent_count != expected_extent_count) {
fprintf(stderr,
"incorrect extent count for %llu; counted %u, expected %u",
- block_group->key.objectid, extent_count,
+ block_group->start, extent_count,
expected_extent_count);
ASSERT(0);
ret = -EIO;
@@ -570,7 +570,7 @@ static int modify_free_space_bitmap(struct btrfs_trans_handle *trans,
* Read the bit for the block immediately before the extent of space if
* that block is within the block group.
*/
- if (start > block_group->key.objectid) {
+ if (start > block_group->start) {
u64 prev_block = start - trans->fs_info->sectorsize;
key.objectid = prev_block;
@@ -622,7 +622,7 @@ static int modify_free_space_bitmap(struct btrfs_trans_handle *trans,
* Read the bit for the block immediately after the extent of space if
* that block is within the block group.
*/
- if (end < block_group->key.objectid + block_group->key.offset) {
+ if (end < block_group->start + block_group->length) {
/* The next block may be in the next bitmap. */
btrfs_item_key_to_cpu(path->nodes[0], &key, path->slots[0]);
if (end >= key.objectid + key.offset) {
@@ -841,7 +841,7 @@ static int add_free_space_extent(struct btrfs_trans_handle *trans,
new_key.offset = size;
/* Search for a neighbor on the left. */
- if (start == block_group->key.objectid)
+ if (start == block_group->start)
goto right;
key.objectid = start - 1;
key.type = (u8)-1;
@@ -861,8 +861,8 @@ static int add_free_space_extent(struct btrfs_trans_handle *trans,
found_start = key.objectid;
found_end = key.objectid + key.offset;
- ASSERT(found_start >= block_group->key.objectid &&
- found_end > block_group->key.objectid);
+ ASSERT(found_start >= block_group->start &&
+ found_end > block_group->start);
ASSERT(found_start < start && found_end <= start);
/*
@@ -880,7 +880,7 @@ static int add_free_space_extent(struct btrfs_trans_handle *trans,
btrfs_release_path(path);
right:
/* Search for a neighbor on the right. */
- if (end == block_group->key.objectid + block_group->key.offset)
+ if (end == block_group->start + block_group->length)
goto insert;
key.objectid = end;
key.type = (u8)-1;
@@ -900,8 +900,8 @@ right:
found_start = key.objectid;
found_end = key.objectid + key.offset;
- ASSERT(found_start >= block_group->key.objectid &&
- found_end > block_group->key.objectid);
+ ASSERT(found_start >= block_group->start &&
+ found_end > block_group->start);
ASSERT((found_start < start && found_end <= start) ||
(found_start >= end && found_end > end));
@@ -1017,7 +1017,7 @@ int populate_free_space_tree(struct btrfs_trans_handle *trans,
* BLOCK_GROUP_ITEM, so an extent may precede the block group that it's
* contained in.
*/
- key.objectid = block_group->key.objectid;
+ key.objectid = block_group->start;
key.type = BTRFS_EXTENT_ITEM_KEY;
key.offset = 0;
@@ -1026,8 +1026,8 @@ int populate_free_space_tree(struct btrfs_trans_handle *trans,
goto out;
ASSERT(ret == 0);
- start = block_group->key.objectid;
- end = block_group->key.objectid + block_group->key.offset;
+ start = block_group->start;
+ end = block_group->start + block_group->length;
while (1) {
btrfs_item_key_to_cpu(path->nodes[0], &key, path->slots[0]);
@@ -1049,7 +1049,7 @@ int populate_free_space_tree(struct btrfs_trans_handle *trans,
else
start += key.offset;
} else if (key.type == BTRFS_BLOCK_GROUP_ITEM_KEY) {
- if (key.objectid != block_group->key.objectid)
+ if (key.objectid != block_group->start)
break;
}
@@ -1090,8 +1090,8 @@ int remove_block_group_free_space(struct btrfs_trans_handle *trans,
goto out;
}
- start = block_group->key.objectid;
- end = block_group->key.objectid + block_group->key.offset;
+ start = block_group->start;
+ end = block_group->start + block_group->length;
key.objectid = end - 1;
key.type = (u8)-1;
@@ -1109,8 +1109,9 @@ int remove_block_group_free_space(struct btrfs_trans_handle *trans,
btrfs_item_key_to_cpu(leaf, &found_key, path->slots[0] - 1);
if (found_key.type == BTRFS_FREE_SPACE_INFO_KEY) {
- ASSERT(found_key.objectid == block_group->key.objectid);
- ASSERT(found_key.offset == block_group->key.offset);
+ ASSERT(found_key.objectid ==
+ block_group->start);
+ ASSERT(found_key.offset == block_group->length);
done = 1;
nr++;
path->slots[0]--;
@@ -1239,8 +1240,8 @@ static int load_free_space_bitmaps(struct btrfs_fs_info *fs_info,
u32 extent_count = 0;
int ret;
- start = block_group->key.objectid;
- end = block_group->key.objectid + block_group->key.offset;
+ start = block_group->start;
+ end = block_group->start + block_group->length;
while (1) {
ret = btrfs_next_item(root, path);
@@ -1318,8 +1319,8 @@ static int load_free_space_extents(struct btrfs_fs_info *fs_info,
u32 extent_count = 0;
int ret;
- start = block_group->key.objectid;
- end = block_group->key.objectid + block_group->key.offset;
+ start = block_group->start;
+ end = block_group->start + block_group->length;
while (1) {
ret = btrfs_next_item(root, path);
@@ -1437,7 +1438,7 @@ int btrfs_create_free_space_tree(struct btrfs_fs_info *fs_info)
block_group = btrfs_lookup_first_block_group(fs_info, start);
if (!block_group)
break;
- start = block_group->key.objectid + block_group->key.offset;
+ start = block_group->start + block_group->length;
ret = populate_free_space_tree(trans, block_group);
if (ret)
goto abort;
diff --git a/mkfs/main.c b/mkfs/main.c
index b659c1cbb56b..5f7b693749b3 100644
--- a/mkfs/main.c
+++ b/mkfs/main.c
@@ -694,14 +694,14 @@ static void update_chunk_allocation(struct btrfs_fs_info *fs_info,
if (!bg_cache)
break;
if ((bg_cache->flags & mixed_flag) == mixed_flag)
- allocation->mixed += bg_cache->key.offset;
+ allocation->mixed += bg_cache->length;
else if (bg_cache->flags & BTRFS_BLOCK_GROUP_DATA)
- allocation->data += bg_cache->key.offset;
+ allocation->data += bg_cache->length;
else if (bg_cache->flags & BTRFS_BLOCK_GROUP_METADATA)
- allocation->metadata += bg_cache->key.offset;
+ allocation->metadata += bg_cache->length;
else
- allocation->system += bg_cache->key.offset;
- search_start = bg_cache->key.objectid + bg_cache->key.offset;
+ allocation->system += bg_cache->length;
+ search_start = bg_cache->start + bg_cache->length;
}
}
diff --git a/volumes.h b/volumes.h
index 41574f21dd23..2387e088ab5d 100644
--- a/volumes.h
+++ b/volumes.h
@@ -216,7 +216,7 @@ static inline int check_crossing_stripes(struct btrfs_fs_info *fs_info,
*/
if (!bg_cache)
return 0;
- bg_offset = start - bg_cache->key.objectid;
+ bg_offset = start - bg_cache->start;
return (bg_offset / BTRFS_STRIPE_LEN !=
(bg_offset + len - 1) / BTRFS_STRIPE_LEN);
--
2.26.2
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH v2 3/4] btrfs-progs: Remove the unused btrfs_block_group_cache::cache
2020-05-01 6:52 [PATCH v2 0/4] btrfs-progs: Sync code for btrfs_block_group Qu Wenruo
2020-05-01 6:52 ` [PATCH v2 1/4] btrfs-progs: Sync block group item accessors from kernel Qu Wenruo
2020-05-01 6:52 ` [PATCH v2 2/4] btrfs-progs: Kill block_group_cache::key Qu Wenruo
@ 2020-05-01 6:52 ` Qu Wenruo
2020-05-01 6:52 ` [PATCH v2 4/4] btrfs-progs: Rename btrfs_block_group_cache to btrfs_block_group Qu Wenruo
2020-05-11 18:50 ` [PATCH v2 0/4] btrfs-progs: Sync code for btrfs_block_group David Sterba
4 siblings, 0 replies; 6+ messages in thread
From: Qu Wenruo @ 2020-05-01 6:52 UTC (permalink / raw)
To: linux-btrfs
There is no user of that member.
Signed-off-by: Qu Wenruo <wqu@suse.com>
---
ctree.h | 1 -
1 file changed, 1 deletion(-)
diff --git a/ctree.h b/ctree.h
index d12ed5d8af31..6ebd4ea61ee5 100644
--- a/ctree.h
+++ b/ctree.h
@@ -1105,7 +1105,6 @@ struct btrfs_space_info {
};
struct btrfs_block_group_cache {
- struct cache_extent cache;
struct btrfs_space_info *space_info;
struct btrfs_free_space_ctl *free_space_ctl;
u64 start;
--
2.26.2
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH v2 4/4] btrfs-progs: Rename btrfs_block_group_cache to btrfs_block_group
2020-05-01 6:52 [PATCH v2 0/4] btrfs-progs: Sync code for btrfs_block_group Qu Wenruo
` (2 preceding siblings ...)
2020-05-01 6:52 ` [PATCH v2 3/4] btrfs-progs: Remove the unused btrfs_block_group_cache::cache Qu Wenruo
@ 2020-05-01 6:52 ` Qu Wenruo
2020-05-11 18:50 ` [PATCH v2 0/4] btrfs-progs: Sync code for btrfs_block_group David Sterba
4 siblings, 0 replies; 6+ messages in thread
From: Qu Wenruo @ 2020-05-01 6:52 UTC (permalink / raw)
To: linux-btrfs
To keep the same naming across kernel and btrfs-progs.
Signed-off-by: Qu Wenruo <wqu@suse.com>
---
check/main.c | 14 +++---
check/mode-common.c | 2 +-
check/mode-lowmem.c | 6 +--
cmds/rescue-chunk-recover.c | 2 +-
convert/main.c | 2 +-
convert/source-fs.c | 2 +-
ctree.h | 17 ++++----
extent-tree.c | 76 ++++++++++++++++-----------------
free-space-cache.c | 10 ++---
free-space-cache.h | 12 +++---
image/main.c | 2 +-
kernel-shared/free-space-tree.c | 40 ++++++++---------
kernel-shared/free-space-tree.h | 6 +--
mkfs/main.c | 2 +-
transaction.h | 2 +-
volumes.h | 2 +-
16 files changed, 97 insertions(+), 100 deletions(-)
diff --git a/check/main.c b/check/main.c
index 2610220e5b6d..e7288e042dba 100644
--- a/check/main.c
+++ b/check/main.c
@@ -4541,7 +4541,7 @@ static struct data_backref *alloc_data_backref(struct extent_record *rec,
/* Check if the type of extent matches with its chunk */
static void check_extent_type(struct extent_record *rec)
{
- struct btrfs_block_group_cache *bg_cache;
+ struct btrfs_block_group *bg_cache;
bg_cache = btrfs_lookup_first_block_group(global_info, rec->start);
if (!bg_cache)
@@ -5443,7 +5443,7 @@ out:
}
static int check_cache_range(struct btrfs_root *root,
- struct btrfs_block_group_cache *cache,
+ struct btrfs_block_group *cache,
u64 offset, u64 bytes)
{
struct btrfs_free_space *entry;
@@ -5537,7 +5537,7 @@ static int check_cache_range(struct btrfs_root *root,
}
static int verify_space_cache(struct btrfs_root *root,
- struct btrfs_block_group_cache *cache)
+ struct btrfs_block_group *cache)
{
struct btrfs_path path;
struct extent_buffer *leaf;
@@ -5616,7 +5616,7 @@ out:
static int check_space_cache(struct btrfs_root *root)
{
- struct btrfs_block_group_cache *cache;
+ struct btrfs_block_group *cache;
u64 start = BTRFS_SUPER_INFO_OFFSET + BTRFS_SUPER_INFO_SIZE;
int ret;
int error = 0;
@@ -8908,7 +8908,7 @@ static int btrfs_fsck_reinit_root(struct btrfs_trans_handle *trans,
static int reset_block_groups(struct btrfs_fs_info *fs_info)
{
- struct btrfs_block_group_cache *cache;
+ struct btrfs_block_group *cache;
struct btrfs_path path;
struct extent_buffer *leaf;
struct btrfs_chunk *chunk;
@@ -9154,7 +9154,7 @@ again:
*/
while (1) {
struct btrfs_block_group_item bgi;
- struct btrfs_block_group_cache *cache;
+ struct btrfs_block_group *cache;
struct btrfs_key key;
cache = btrfs_lookup_first_block_group(fs_info, start);
@@ -9806,7 +9806,7 @@ out:
static int clear_free_space_cache(struct btrfs_fs_info *fs_info)
{
struct btrfs_trans_handle *trans;
- struct btrfs_block_group_cache *bg_cache;
+ struct btrfs_block_group *bg_cache;
u64 current = 0;
int ret = 0;
diff --git a/check/mode-common.c b/check/mode-common.c
index 73b2622dd674..aa45c5c2b8a3 100644
--- a/check/mode-common.c
+++ b/check/mode-common.c
@@ -582,7 +582,7 @@ int check_child_node(struct extent_buffer *parent, int slot,
void reset_cached_block_groups(struct btrfs_fs_info *fs_info)
{
- struct btrfs_block_group_cache *cache;
+ struct btrfs_block_group *cache;
u64 start, end;
int ret;
diff --git a/check/mode-lowmem.c b/check/mode-lowmem.c
index b47963a46d80..821ebc57c8ed 100644
--- a/check/mode-lowmem.c
+++ b/check/mode-lowmem.c
@@ -239,7 +239,7 @@ static int update_nodes_refs(struct btrfs_root *root, u64 bytenr,
* according to @cache.
*/
static int modify_block_group_cache(struct btrfs_fs_info *fs_info,
- struct btrfs_block_group_cache *block_group, int cache)
+ struct btrfs_block_group *block_group, int cache)
{
struct extent_io_tree *free_space_cache = &fs_info->free_space_cache;
u64 start = block_group->start;
@@ -269,7 +269,7 @@ static int modify_block_groups_cache(struct btrfs_fs_info *fs_info, u64 flags,
struct btrfs_root *root = fs_info->extent_root;
struct btrfs_key key;
struct btrfs_path path;
- struct btrfs_block_group_cache *bg_cache;
+ struct btrfs_block_group *bg_cache;
struct btrfs_block_group_item *bi;
struct btrfs_block_group_item bg_item;
struct extent_buffer *eb;
@@ -367,7 +367,7 @@ out:
static int force_cow_in_new_chunk(struct btrfs_fs_info *fs_info,
u64 *start_ret)
{
- struct btrfs_block_group_cache *bg;
+ struct btrfs_block_group *bg;
u64 start;
u64 nbytes;
u64 alloc_profile;
diff --git a/cmds/rescue-chunk-recover.c b/cmds/rescue-chunk-recover.c
index 101b32700b0d..8732324e7da0 100644
--- a/cmds/rescue-chunk-recover.c
+++ b/cmds/rescue-chunk-recover.c
@@ -1087,7 +1087,7 @@ err:
static int block_group_free_all_extent(struct btrfs_trans_handle *trans,
struct block_group_record *bg)
{
- struct btrfs_block_group_cache *cache;
+ struct btrfs_block_group *cache;
struct btrfs_fs_info *info;
u64 start;
u64 end;
diff --git a/convert/main.c b/convert/main.c
index 62d839b7262c..9b2d2cfc8a28 100644
--- a/convert/main.c
+++ b/convert/main.c
@@ -202,7 +202,7 @@ static int create_image_file_range(struct btrfs_trans_handle *trans,
u32 convert_flags)
{
struct cache_extent *cache;
- struct btrfs_block_group_cache *bg_cache;
+ struct btrfs_block_group *bg_cache;
u64 len = *ret_len;
u64 disk_bytenr;
int i;
diff --git a/convert/source-fs.c b/convert/source-fs.c
index a4e49b774958..f7fd3d6055b7 100644
--- a/convert/source-fs.c
+++ b/convert/source-fs.c
@@ -90,7 +90,7 @@ int block_iterate_proc(u64 disk_block, u64 file_block,
u64 reserved_boundary;
int do_barrier;
struct btrfs_root *root = idata->root;
- struct btrfs_block_group_cache *cache;
+ struct btrfs_block_group *cache;
u32 sectorsize = root->fs_info->sectorsize;
u64 bytenr = disk_block * sectorsize;
diff --git a/ctree.h b/ctree.h
index 6ebd4ea61ee5..0256b0e6bc3d 100644
--- a/ctree.h
+++ b/ctree.h
@@ -1104,7 +1104,7 @@ struct btrfs_space_info {
struct list_head list;
};
-struct btrfs_block_group_cache {
+struct btrfs_block_group {
struct btrfs_space_info *space_info;
struct btrfs_free_space_ctl *free_space_ctl;
u64 start;
@@ -2539,10 +2539,9 @@ int btrfs_fix_block_accounting(struct btrfs_trans_handle *trans);
void btrfs_pin_extent(struct btrfs_fs_info *fs_info, u64 bytenr, u64 num_bytes);
void btrfs_unpin_extent(struct btrfs_fs_info *fs_info,
u64 bytenr, u64 num_bytes);
-struct btrfs_block_group_cache *btrfs_lookup_block_group(struct
- btrfs_fs_info *info,
- u64 bytenr);
-struct btrfs_block_group_cache *btrfs_lookup_first_block_group(struct
+struct btrfs_block_group *btrfs_lookup_block_group(struct btrfs_fs_info *info,
+ u64 bytenr);
+struct btrfs_block_group *btrfs_lookup_first_block_group(struct
btrfs_fs_info *info,
u64 bytenr);
struct extent_buffer *btrfs_alloc_free_block(struct btrfs_trans_handle *trans,
@@ -2583,7 +2582,7 @@ int update_space_info(struct btrfs_fs_info *info, u64 flags,
struct btrfs_space_info **space_info);
int btrfs_free_block_groups(struct btrfs_fs_info *info);
int btrfs_read_block_groups(struct btrfs_fs_info *info);
-struct btrfs_block_group_cache *
+struct btrfs_block_group *
btrfs_add_block_group(struct btrfs_fs_info *fs_info, u64 bytes_used, u64 type,
u64 chunk_offset, u64 size);
int btrfs_make_block_group(struct btrfs_trans_handle *trans,
@@ -2601,10 +2600,10 @@ int btrfs_record_file_extent(struct btrfs_trans_handle *trans,
int btrfs_free_block_group(struct btrfs_trans_handle *trans,
struct btrfs_fs_info *fs_info, u64 bytenr, u64 len);
void free_excluded_extents(struct btrfs_fs_info *fs_info,
- struct btrfs_block_group_cache *cache);
+ struct btrfs_block_group *cache);
int exclude_super_stripes(struct btrfs_fs_info *fs_info,
- struct btrfs_block_group_cache *cache);
-u64 add_new_free_space(struct btrfs_block_group_cache *block_group,
+ struct btrfs_block_group *cache);
+u64 add_new_free_space(struct btrfs_block_group *block_group,
struct btrfs_fs_info *info, u64 start, u64 end);
u64 hash_extent_data_ref(u64 root_objectid, u64 owner, u64 offset);
diff --git a/extent-tree.c b/extent-tree.c
index aee859af5d98..bd7dbf551876 100644
--- a/extent-tree.c
+++ b/extent-tree.c
@@ -50,12 +50,12 @@ static int __free_extent(struct btrfs_trans_handle *trans,
u64 bytenr, u64 num_bytes, u64 parent,
u64 root_objectid, u64 owner_objectid,
u64 owner_offset, int refs_to_drop);
-static struct btrfs_block_group_cache *
-btrfs_find_block_group(struct btrfs_root *root, struct btrfs_block_group_cache
+static struct btrfs_block_group *
+btrfs_find_block_group(struct btrfs_root *root, struct btrfs_block_group
*hint, u64 search_start, int data, int owner);
static int remove_sb_from_cache(struct btrfs_root *root,
- struct btrfs_block_group_cache *cache)
+ struct btrfs_block_group *cache)
{
u64 bytenr;
u64 *logical;
@@ -80,7 +80,7 @@ static int remove_sb_from_cache(struct btrfs_root *root,
}
static int cache_block_group(struct btrfs_root *root,
- struct btrfs_block_group_cache *block_group)
+ struct btrfs_block_group *block_group)
{
struct btrfs_path *path;
int ret;
@@ -166,17 +166,17 @@ err:
* This adds the block group to the fs_info rb tree for the block group cache
*/
static int btrfs_add_block_group_cache(struct btrfs_fs_info *info,
- struct btrfs_block_group_cache *block_group)
+ struct btrfs_block_group *block_group)
{
struct rb_node **p;
struct rb_node *parent = NULL;
- struct btrfs_block_group_cache *cache;
+ struct btrfs_block_group *cache;
p = &info->block_group_cache_tree.rb_node;
while (*p) {
parent = *p;
- cache = rb_entry(parent, struct btrfs_block_group_cache,
+ cache = rb_entry(parent, struct btrfs_block_group,
cache_node);
if (block_group->start < cache->start)
p = &(*p)->rb_left;
@@ -201,17 +201,17 @@ static int btrfs_add_block_group_cache(struct btrfs_fs_info *info,
* if 0, return NULL if there's no block group containing the bytenr.
* if 1, return the block group which starts after @bytenr.
*/
-static struct btrfs_block_group_cache *block_group_cache_tree_search(
+static struct btrfs_block_group *block_group_cache_tree_search(
struct btrfs_fs_info *info, u64 bytenr, int next)
{
- struct btrfs_block_group_cache *cache, *ret = NULL;
+ struct btrfs_block_group *cache, *ret = NULL;
struct rb_node *n;
u64 end, start;
n = info->block_group_cache_tree.rb_node;
while (n) {
- cache = rb_entry(n, struct btrfs_block_group_cache,
+ cache = rb_entry(n, struct btrfs_block_group,
cache_node);
end = cache->start + cache->length - 1;
start = cache->start;
@@ -239,7 +239,7 @@ static struct btrfs_block_group_cache *block_group_cache_tree_search(
* Return the block group that contains @bytenr, otherwise return the next one
* that starts after @bytenr
*/
-struct btrfs_block_group_cache *btrfs_lookup_first_block_group(
+struct btrfs_block_group *btrfs_lookup_first_block_group(
struct btrfs_fs_info *info, u64 bytenr)
{
return block_group_cache_tree_search(info, bytenr, 1);
@@ -248,23 +248,23 @@ struct btrfs_block_group_cache *btrfs_lookup_first_block_group(
/*
* Return the block group that contains the given bytenr
*/
-struct btrfs_block_group_cache *btrfs_lookup_block_group(
+struct btrfs_block_group *btrfs_lookup_block_group(
struct btrfs_fs_info *info, u64 bytenr)
{
return block_group_cache_tree_search(info, bytenr, 0);
}
-static int block_group_bits(struct btrfs_block_group_cache *cache, u64 bits)
+static int block_group_bits(struct btrfs_block_group *cache, u64 bits)
{
return (cache->flags & bits) == bits;
}
static int noinline find_search_start(struct btrfs_root *root,
- struct btrfs_block_group_cache **cache_ret,
+ struct btrfs_block_group **cache_ret,
u64 *start_ret, int num, int data)
{
int ret;
- struct btrfs_block_group_cache *cache = *cache_ret;
+ struct btrfs_block_group *cache = *cache_ret;
u64 last = *start_ret;
u64 start = 0;
u64 end = 0;
@@ -326,12 +326,12 @@ wrapped:
goto again;
}
-static struct btrfs_block_group_cache *
-btrfs_find_block_group(struct btrfs_root *root, struct btrfs_block_group_cache
+static struct btrfs_block_group *
+btrfs_find_block_group(struct btrfs_root *root, struct btrfs_block_group
*hint, u64 search_start, int data, int owner)
{
- struct btrfs_block_group_cache *cache;
- struct btrfs_block_group_cache *found_group = NULL;
+ struct btrfs_block_group *cache;
+ struct btrfs_block_group *found_group = NULL;
struct btrfs_fs_info *info = root->fs_info;
u64 used;
u64 last = 0;
@@ -344,7 +344,7 @@ btrfs_find_block_group(struct btrfs_root *root, struct btrfs_block_group_cache
factor = 10;
if (search_start) {
- struct btrfs_block_group_cache *shint;
+ struct btrfs_block_group *shint;
shint = btrfs_lookup_block_group(info, search_start);
if (shint && !shint->ro && block_group_bits(shint, data)) {
used = shint->used;
@@ -1528,7 +1528,7 @@ int btrfs_dec_ref(struct btrfs_trans_handle *trans, struct btrfs_root *root,
static int write_one_cache_group(struct btrfs_trans_handle *trans,
struct btrfs_path *path,
- struct btrfs_block_group_cache *cache)
+ struct btrfs_block_group *cache)
{
int ret;
struct btrfs_root *extent_root = trans->fs_info->extent_root;
@@ -1564,7 +1564,7 @@ fail:
int btrfs_write_dirty_block_groups(struct btrfs_trans_handle *trans)
{
- struct btrfs_block_group_cache *cache;
+ struct btrfs_block_group *cache;
struct btrfs_path *path;
int ret = 0;
@@ -1574,7 +1574,7 @@ int btrfs_write_dirty_block_groups(struct btrfs_trans_handle *trans)
while (!list_empty(&trans->dirty_bgs)) {
cache = list_first_entry(&trans->dirty_bgs,
- struct btrfs_block_group_cache, dirty_list);
+ struct btrfs_block_group, dirty_list);
list_del_init(&cache->dirty_list);
ret = write_one_cache_group(trans, path, cache);
if (ret)
@@ -1744,7 +1744,7 @@ static int update_block_group(struct btrfs_trans_handle *trans, u64 bytenr,
u64 num_bytes, int alloc, int mark_free)
{
struct btrfs_fs_info *info = trans->fs_info;
- struct btrfs_block_group_cache *cache;
+ struct btrfs_block_group *cache;
u64 total = num_bytes;
u64 old_val;
u64 byte_in_group;
@@ -1791,7 +1791,7 @@ static int update_pinned_extents(struct btrfs_fs_info *fs_info,
u64 bytenr, u64 num, int pin)
{
u64 len;
- struct btrfs_block_group_cache *cache;
+ struct btrfs_block_group *cache;
if (pin) {
set_extent_dirty(&fs_info->pinned_extents,
@@ -2178,7 +2178,7 @@ static int noinline find_free_extent(struct btrfs_trans_handle *trans,
struct btrfs_root * root = orig_root->fs_info->extent_root;
struct btrfs_fs_info *info = root->fs_info;
u64 total_needed = num_bytes;
- struct btrfs_block_group_cache *block_group;
+ struct btrfs_block_group *block_group;
int full_scan = 0;
int wrapped = 0;
@@ -2251,7 +2251,7 @@ check_failed:
if (!(data & BTRFS_BLOCK_GROUP_DATA)) {
if (check_crossing_stripes(info, ins->objectid, num_bytes)) {
- struct btrfs_block_group_cache *bg_cache;
+ struct btrfs_block_group *bg_cache;
u64 bg_offset;
bg_cache = btrfs_lookup_block_group(info, ins->objectid);
@@ -2551,7 +2551,7 @@ struct extent_buffer *btrfs_alloc_free_block(struct btrfs_trans_handle *trans,
int btrfs_free_block_groups(struct btrfs_fs_info *info)
{
struct btrfs_space_info *sinfo;
- struct btrfs_block_group_cache *cache, *next;
+ struct btrfs_block_group *cache, *next;
u64 start;
u64 end;
int ret;
@@ -2641,7 +2641,7 @@ static int read_one_block_group(struct btrfs_fs_info *fs_info,
{
struct extent_buffer *leaf = path->nodes[0];
struct btrfs_space_info *space_info;
- struct btrfs_block_group_cache *cache;
+ struct btrfs_block_group *cache;
struct btrfs_block_group_item bgi;
struct btrfs_key key;
int slot = path->slots[0];
@@ -2733,12 +2733,12 @@ error:
return ret;
}
-struct btrfs_block_group_cache *
+struct btrfs_block_group *
btrfs_add_block_group(struct btrfs_fs_info *fs_info, u64 bytes_used, u64 type,
u64 chunk_offset, u64 size)
{
int ret;
- struct btrfs_block_group_cache *cache;
+ struct btrfs_block_group *cache;
cache = kzalloc(sizeof(*cache), GFP_NOFS);
BUG_ON(!cache);
@@ -2767,7 +2767,7 @@ int btrfs_make_block_group(struct btrfs_trans_handle *trans,
{
int ret;
struct btrfs_root *extent_root = fs_info->extent_root;
- struct btrfs_block_group_cache *cache;
+ struct btrfs_block_group *cache;
struct btrfs_block_group_item bgi;
struct btrfs_key key;
@@ -2805,7 +2805,7 @@ int btrfs_make_block_groups(struct btrfs_trans_handle *trans,
u64 total_metadata = 0;
int ret;
struct btrfs_root *extent_root = fs_info->extent_root;
- struct btrfs_block_group_cache *cache;
+ struct btrfs_block_group *cache;
total_bytes = btrfs_super_total_bytes(fs_info->super_copy);
group_align = 64 * fs_info->sectorsize;
@@ -3112,7 +3112,7 @@ static int free_block_group_cache(struct btrfs_trans_handle *trans,
struct btrfs_fs_info *fs_info,
u64 bytenr, u64 len)
{
- struct btrfs_block_group_cache *cache;
+ struct btrfs_block_group *cache;
struct cache_extent *ce;
struct map_lookup *map;
int ret;
@@ -3251,7 +3251,7 @@ int btrfs_fix_block_accounting(struct btrfs_trans_handle *trans)
struct btrfs_path path;
struct btrfs_key key;
struct extent_buffer *leaf;
- struct btrfs_block_group_cache *cache;
+ struct btrfs_block_group *cache;
struct btrfs_fs_info *fs_info = trans->fs_info;
struct btrfs_root *root = fs_info->extent_root;
@@ -3546,7 +3546,7 @@ static int add_excluded_extent(struct btrfs_fs_info *fs_info,
}
void free_excluded_extents(struct btrfs_fs_info *fs_info,
- struct btrfs_block_group_cache *cache)
+ struct btrfs_block_group *cache)
{
u64 start, end;
@@ -3558,7 +3558,7 @@ void free_excluded_extents(struct btrfs_fs_info *fs_info,
}
int exclude_super_stripes(struct btrfs_fs_info *fs_info,
- struct btrfs_block_group_cache *cache)
+ struct btrfs_block_group *cache)
{
u64 bytenr;
u64 *logical;
@@ -3611,7 +3611,7 @@ int exclude_super_stripes(struct btrfs_fs_info *fs_info,
return 0;
}
-u64 add_new_free_space(struct btrfs_block_group_cache *block_group,
+u64 add_new_free_space(struct btrfs_block_group *block_group,
struct btrfs_fs_info *info, u64 start, u64 end)
{
u64 extent_start, extent_end, size, total_added = 0;
diff --git a/free-space-cache.c b/free-space-cache.c
index 1523dbed018a..a9e0f8dd2e9e 100644
--- a/free-space-cache.c
+++ b/free-space-cache.c
@@ -432,7 +432,7 @@ free_cache:
}
int load_free_space_cache(struct btrfs_fs_info *fs_info,
- struct btrfs_block_group_cache *block_group)
+ struct btrfs_block_group *block_group)
{
struct btrfs_free_space_ctl *ctl = block_group->free_space_ctl;
struct btrfs_path *path;
@@ -766,7 +766,7 @@ static void try_merge_free_space(struct btrfs_free_space_ctl *ctl,
}
}
-void btrfs_dump_free_space(struct btrfs_block_group_cache *block_group,
+void btrfs_dump_free_space(struct btrfs_block_group *block_group,
u64 bytes)
{
struct btrfs_free_space_ctl *ctl = block_group->free_space_ctl;
@@ -786,7 +786,7 @@ void btrfs_dump_free_space(struct btrfs_block_group_cache *block_group,
printk("%d blocks of free space at or bigger than bytes is \n", count);
}
-int btrfs_init_free_space_ctl(struct btrfs_block_group_cache *block_group,
+int btrfs_init_free_space_ctl(struct btrfs_block_group *block_group,
int sectorsize)
{
struct btrfs_free_space_ctl *ctl;
@@ -817,7 +817,7 @@ void __btrfs_remove_free_space_cache(struct btrfs_free_space_ctl *ctl)
}
}
-void btrfs_remove_free_space_cache(struct btrfs_block_group_cache *block_group)
+void btrfs_remove_free_space_cache(struct btrfs_block_group *block_group)
{
__btrfs_remove_free_space_cache(block_group->free_space_ctl);
}
@@ -896,7 +896,7 @@ next:
}
int btrfs_clear_free_space_cache(struct btrfs_fs_info *fs_info,
- struct btrfs_block_group_cache *bg)
+ struct btrfs_block_group *bg)
{
struct btrfs_trans_handle *trans;
struct btrfs_root *tree_root = fs_info->tree_root;
diff --git a/free-space-cache.h b/free-space-cache.h
index fb552cfd9e98..36ce29933c37 100644
--- a/free-space-cache.h
+++ b/free-space-cache.h
@@ -44,21 +44,19 @@ struct btrfs_free_space_ctl {
};
int load_free_space_cache(struct btrfs_fs_info *fs_info,
- struct btrfs_block_group_cache *block_group);
+ struct btrfs_block_group *block_group);
void __btrfs_remove_free_space_cache(struct btrfs_free_space_ctl *ctl);
-void btrfs_remove_free_space_cache(struct btrfs_block_group_cache
- *block_group);
-void btrfs_dump_free_space(struct btrfs_block_group_cache *block_group,
- u64 bytes);
+void btrfs_remove_free_space_cache(struct btrfs_block_group *block_group);
+void btrfs_dump_free_space(struct btrfs_block_group *block_group, u64 bytes);
struct btrfs_free_space *
btrfs_find_free_space(struct btrfs_free_space_ctl *ctl, u64 offset, u64 bytes);
-int btrfs_init_free_space_ctl(struct btrfs_block_group_cache *block_group,
+int btrfs_init_free_space_ctl(struct btrfs_block_group *block_group,
int sectorsize);
void unlink_free_space(struct btrfs_free_space_ctl *ctl,
struct btrfs_free_space *info);
int btrfs_add_free_space(struct btrfs_free_space_ctl *ctl, u64 offset,
u64 bytes);
int btrfs_clear_free_space_cache(struct btrfs_fs_info *fs_info,
- struct btrfs_block_group_cache *bg);
+ struct btrfs_block_group *bg);
#endif
diff --git a/image/main.c b/image/main.c
index 0d286b8f2ad9..10f6182e0eac 100644
--- a/image/main.c
+++ b/image/main.c
@@ -2341,7 +2341,7 @@ again:
static void fixup_block_groups(struct btrfs_trans_handle *trans)
{
struct btrfs_fs_info *fs_info = trans->fs_info;
- struct btrfs_block_group_cache *bg;
+ struct btrfs_block_group *bg;
struct btrfs_mapping_tree *map_tree = &fs_info->mapping_tree;
struct cache_extent *ce;
struct map_lookup *map;
diff --git a/kernel-shared/free-space-tree.c b/kernel-shared/free-space-tree.c
index 6ed5b76a03d9..5ca237722965 100644
--- a/kernel-shared/free-space-tree.c
+++ b/kernel-shared/free-space-tree.c
@@ -28,7 +28,7 @@
static struct btrfs_free_space_info *
search_free_space_info(struct btrfs_trans_handle *trans,
struct btrfs_fs_info *fs_info,
- struct btrfs_block_group_cache *block_group,
+ struct btrfs_block_group *block_group,
struct btrfs_path *path, int cow)
{
struct btrfs_root *root = fs_info->free_space_root;
@@ -49,7 +49,7 @@ search_free_space_info(struct btrfs_trans_handle *trans,
struct btrfs_free_space_info);
}
-static int free_space_test_bit(struct btrfs_block_group_cache *block_group,
+static int free_space_test_bit(struct btrfs_block_group *block_group,
struct btrfs_path *path, u64 offset)
{
struct extent_buffer *leaf;
@@ -100,7 +100,7 @@ static int btrfs_search_prev_slot(struct btrfs_trans_handle *trans,
}
static int add_new_free_space_info(struct btrfs_trans_handle *trans,
- struct btrfs_block_group_cache *block_group,
+ struct btrfs_block_group *block_group,
struct btrfs_path *path)
{
struct btrfs_root *root = trans->fs_info->free_space_root;
@@ -175,7 +175,7 @@ static void le_bitmap_set(unsigned long *map, unsigned int start, int len)
}
static int convert_free_space_to_bitmaps(struct btrfs_trans_handle *trans,
- struct btrfs_block_group_cache *block_group,
+ struct btrfs_block_group *block_group,
struct btrfs_path *path)
{
struct btrfs_fs_info *fs_info = trans->fs_info;
@@ -314,7 +314,7 @@ out:
}
static int convert_free_space_to_extents(struct btrfs_trans_handle *trans,
- struct btrfs_block_group_cache *block_group,
+ struct btrfs_block_group *block_group,
struct btrfs_path *path)
{
struct btrfs_fs_info *fs_info = trans->fs_info;
@@ -447,7 +447,7 @@ out:
}
static int update_free_space_extent_count(struct btrfs_trans_handle *trans,
- struct btrfs_block_group_cache *block_group,
+ struct btrfs_block_group *block_group,
struct btrfs_path *path,
int new_extents)
{
@@ -487,7 +487,7 @@ out:
}
-static void free_space_set_bits(struct btrfs_block_group_cache *block_group,
+static void free_space_set_bits(struct btrfs_block_group *block_group,
struct btrfs_path *path, u64 *start, u64 *size,
int bit)
{
@@ -554,7 +554,7 @@ static int free_space_next_bitmap(struct btrfs_trans_handle *trans,
* the bitmap.
*/
static int modify_free_space_bitmap(struct btrfs_trans_handle *trans,
- struct btrfs_block_group_cache *block_group,
+ struct btrfs_block_group *block_group,
struct btrfs_path *path,
u64 start, u64 size, int remove)
{
@@ -667,7 +667,7 @@ out:
}
static int remove_free_space_extent(struct btrfs_trans_handle *trans,
- struct btrfs_block_group_cache *block_group,
+ struct btrfs_block_group *block_group,
struct btrfs_path *path,
u64 start, u64 size)
{
@@ -753,7 +753,7 @@ out:
}
static int __remove_from_free_space_tree(struct btrfs_trans_handle *trans,
- struct btrfs_block_group_cache *block_group,
+ struct btrfs_block_group *block_group,
struct btrfs_path *path, u64 start, u64 size)
{
struct btrfs_free_space_info *info;
@@ -777,7 +777,7 @@ static int __remove_from_free_space_tree(struct btrfs_trans_handle *trans,
int remove_from_free_space_tree(struct btrfs_trans_handle *trans, u64 start,
u64 size)
{
- struct btrfs_block_group_cache *block_group;
+ struct btrfs_block_group *block_group;
struct btrfs_path *path;
int ret;
@@ -807,7 +807,7 @@ out:
}
static int add_free_space_extent(struct btrfs_trans_handle *trans,
- struct btrfs_block_group_cache *block_group,
+ struct btrfs_block_group *block_group,
struct btrfs_path *path,
u64 start, u64 size)
{
@@ -933,7 +933,7 @@ out:
}
static int __add_to_free_space_tree(struct btrfs_trans_handle *trans,
- struct btrfs_block_group_cache *block_group,
+ struct btrfs_block_group *block_group,
struct btrfs_path *path, u64 start, u64 size)
{
struct btrfs_fs_info *fs_info = trans->fs_info;
@@ -958,7 +958,7 @@ static int __add_to_free_space_tree(struct btrfs_trans_handle *trans,
int add_to_free_space_tree(struct btrfs_trans_handle *trans, u64 start,
u64 size)
{
- struct btrfs_block_group_cache *block_group;
+ struct btrfs_block_group *block_group;
struct btrfs_path *path;
int ret;
@@ -987,7 +987,7 @@ out:
}
int populate_free_space_tree(struct btrfs_trans_handle *trans,
- struct btrfs_block_group_cache *block_group)
+ struct btrfs_block_group *block_group)
{
struct btrfs_root *extent_root = trans->fs_info->extent_root;
struct btrfs_path *path, *path2;
@@ -1074,7 +1074,7 @@ out:
}
int remove_block_group_free_space(struct btrfs_trans_handle *trans,
- struct btrfs_block_group_cache *block_group)
+ struct btrfs_block_group *block_group)
{
struct btrfs_root *root = trans->fs_info->free_space_root;
struct btrfs_path *path;
@@ -1227,7 +1227,7 @@ abort:
}
static int load_free_space_bitmaps(struct btrfs_fs_info *fs_info,
- struct btrfs_block_group_cache *block_group,
+ struct btrfs_block_group *block_group,
struct btrfs_path *path,
u32 expected_extent_count,
int *errors)
@@ -1307,7 +1307,7 @@ out:
}
static int load_free_space_extents(struct btrfs_fs_info *fs_info,
- struct btrfs_block_group_cache *block_group,
+ struct btrfs_block_group *block_group,
struct btrfs_path *path,
u32 expected_extent_count,
int *errors)
@@ -1418,7 +1418,7 @@ int btrfs_create_free_space_tree(struct btrfs_fs_info *fs_info)
struct btrfs_trans_handle *trans;
struct btrfs_root *tree_root = fs_info->tree_root;
struct btrfs_root *free_space_root;
- struct btrfs_block_group_cache *block_group;
+ struct btrfs_block_group *block_group;
u64 start = BTRFS_SUPER_INFO_OFFSET + BTRFS_SUPER_INFO_SIZE;
int ret;
@@ -1459,7 +1459,7 @@ abort:
}
int load_free_space_tree(struct btrfs_fs_info *fs_info,
- struct btrfs_block_group_cache *block_group)
+ struct btrfs_block_group *block_group)
{
struct btrfs_free_space_info *info;
struct btrfs_path *path;
diff --git a/kernel-shared/free-space-tree.h b/kernel-shared/free-space-tree.h
index 1af12a81022a..3d32e167fd58 100644
--- a/kernel-shared/free-space-tree.h
+++ b/kernel-shared/free-space-tree.h
@@ -24,11 +24,11 @@
int btrfs_clear_free_space_tree(struct btrfs_fs_info *fs_info);
int load_free_space_tree(struct btrfs_fs_info *fs_info,
- struct btrfs_block_group_cache *block_group);
+ struct btrfs_block_group *block_group);
int populate_free_space_tree(struct btrfs_trans_handle *trans,
- struct btrfs_block_group_cache *block_group);
+ struct btrfs_block_group *block_group);
int remove_block_group_free_space(struct btrfs_trans_handle *trans,
- struct btrfs_block_group_cache *block_group);
+ struct btrfs_block_group *block_group);
int add_to_free_space_tree(struct btrfs_trans_handle *trans, u64 start,
u64 size);
int remove_from_free_space_tree(struct btrfs_trans_handle *trans, u64 start,
diff --git a/mkfs/main.c b/mkfs/main.c
index 5f7b693749b3..89f3877fa3b2 100644
--- a/mkfs/main.c
+++ b/mkfs/main.c
@@ -680,7 +680,7 @@ out:
static void update_chunk_allocation(struct btrfs_fs_info *fs_info,
struct mkfs_allocation *allocation)
{
- struct btrfs_block_group_cache *bg_cache;
+ struct btrfs_block_group *bg_cache;
const u64 mixed_flag = BTRFS_BLOCK_GROUP_DATA | BTRFS_BLOCK_GROUP_METADATA;
u64 search_start = 0;
diff --git a/transaction.h b/transaction.h
index c9ea545aca07..f2c96b17374f 100644
--- a/transaction.h
+++ b/transaction.h
@@ -34,7 +34,7 @@ struct btrfs_trans_handle {
u64 delayed_ref_updates;
unsigned long blocks_reserved;
unsigned long blocks_used;
- struct btrfs_block_group_cache *block_group;
+ struct btrfs_block_group *block_group;
struct btrfs_delayed_ref_root delayed_refs;
struct list_head dirty_bgs;
};
diff --git a/volumes.h b/volumes.h
index 2387e088ab5d..31c756607735 100644
--- a/volumes.h
+++ b/volumes.h
@@ -206,7 +206,7 @@ static inline enum btrfs_raid_types btrfs_bg_flags_to_raid_index(u64 flags)
static inline int check_crossing_stripes(struct btrfs_fs_info *fs_info,
u64 start, u64 len)
{
- struct btrfs_block_group_cache *bg_cache;
+ struct btrfs_block_group *bg_cache;
u64 bg_offset;
bg_cache = btrfs_lookup_block_group(fs_info, start);
--
2.26.2
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH v2 0/4] btrfs-progs: Sync code for btrfs_block_group
2020-05-01 6:52 [PATCH v2 0/4] btrfs-progs: Sync code for btrfs_block_group Qu Wenruo
` (3 preceding siblings ...)
2020-05-01 6:52 ` [PATCH v2 4/4] btrfs-progs: Rename btrfs_block_group_cache to btrfs_block_group Qu Wenruo
@ 2020-05-11 18:50 ` David Sterba
4 siblings, 0 replies; 6+ messages in thread
From: David Sterba @ 2020-05-11 18:50 UTC (permalink / raw)
To: Qu Wenruo; +Cc: linux-btrfs
On Fri, May 01, 2020 at 02:52:15PM +0800, Qu Wenruo wrote:
> This patchset mostly make btrfs_block_group structure to sync with
> kernel, providing the basis for later modification. (Hint: skinny bg
> tree)
>
> Changelog:
> v2:
> - Add a patch to sync the block group item accessors
>
> Qu Wenruo (4):
> btrfs-progs: Sync block group item accessors from kernel
> btrfs-progs: Kill block_group_cache::key
> btrfs-progs: Remove the unused btrfs_block_group_cache::cache
> btrfs-progs: Rename btrfs_block_group_cache to btrfs_block_group
All added to devel, thanks.
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2020-05-11 18:51 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-05-01 6:52 [PATCH v2 0/4] btrfs-progs: Sync code for btrfs_block_group Qu Wenruo
2020-05-01 6:52 ` [PATCH v2 1/4] btrfs-progs: Sync block group item accessors from kernel Qu Wenruo
2020-05-01 6:52 ` [PATCH v2 2/4] btrfs-progs: Kill block_group_cache::key Qu Wenruo
2020-05-01 6:52 ` [PATCH v2 3/4] btrfs-progs: Remove the unused btrfs_block_group_cache::cache Qu Wenruo
2020-05-01 6:52 ` [PATCH v2 4/4] btrfs-progs: Rename btrfs_block_group_cache to btrfs_block_group Qu Wenruo
2020-05-11 18:50 ` [PATCH v2 0/4] btrfs-progs: Sync code for btrfs_block_group David Sterba
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).