Skip to content

Commit da17066

Browse files
jeffmahoneykdave
authored andcommitted
btrfs: pull node/sector/stripe sizes out of root and into fs_info
We track the node sizes per-root, but they never vary from the values in the superblock. This patch messes with the 80-column style a bit, but subsequent patches to factor out root->fs_info into a convenience variable fix it up again. Signed-off-by: Jeff Mahoney <jeffm@suse.com> Signed-off-by: David Sterba <dsterba@suse.com>
1 parent f15376d commit da17066

39 files changed

Lines changed: 432 additions & 414 deletions

fs/btrfs/backref.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1829,7 +1829,7 @@ int extent_from_logical(struct btrfs_fs_info *fs_info, u64 logical,
18291829
}
18301830
btrfs_item_key_to_cpu(path->nodes[0], found_key, path->slots[0]);
18311831
if (found_key->type == BTRFS_METADATA_ITEM_KEY)
1832-
size = fs_info->extent_root->nodesize;
1832+
size = fs_info->nodesize;
18331833
else if (found_key->type == BTRFS_EXTENT_ITEM_KEY)
18341834
size = found_key->offset;
18351835

fs/btrfs/check-integrity.c

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2911,14 +2911,14 @@ int btrfsic_mount(struct btrfs_root *root,
29112911
struct list_head *dev_head = &fs_devices->devices;
29122912
struct btrfs_device *device;
29132913

2914-
if (root->nodesize & ((u64)PAGE_SIZE - 1)) {
2914+
if (root->fs_info->nodesize & ((u64)PAGE_SIZE - 1)) {
29152915
pr_info("btrfsic: cannot handle nodesize %d not being a multiple of PAGE_SIZE %ld!\n",
2916-
root->nodesize, PAGE_SIZE);
2916+
root->fs_info->nodesize, PAGE_SIZE);
29172917
return -1;
29182918
}
2919-
if (root->sectorsize & ((u64)PAGE_SIZE - 1)) {
2919+
if (root->fs_info->sectorsize & ((u64)PAGE_SIZE - 1)) {
29202920
pr_info("btrfsic: cannot handle sectorsize %d not being a multiple of PAGE_SIZE %ld!\n",
2921-
root->sectorsize, PAGE_SIZE);
2921+
root->fs_info->sectorsize, PAGE_SIZE);
29222922
return -1;
29232923
}
29242924
state = kzalloc(sizeof(*state), GFP_KERNEL | __GFP_NOWARN | __GFP_REPEAT);
@@ -2940,8 +2940,8 @@ int btrfsic_mount(struct btrfs_root *root,
29402940
state->print_mask = print_mask;
29412941
state->include_extent_data = including_extent_data;
29422942
state->csum_size = 0;
2943-
state->metablock_size = root->nodesize;
2944-
state->datablock_size = root->sectorsize;
2943+
state->metablock_size = root->fs_info->nodesize;
2944+
state->datablock_size = root->fs_info->sectorsize;
29452945
INIT_LIST_HEAD(&state->all_blocks_list);
29462946
btrfsic_block_hashtable_init(&state->block_hashtable);
29472947
btrfsic_block_link_hashtable_init(&state->block_link_hashtable);

fs/btrfs/compression.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ static inline int compressed_bio_size(struct btrfs_root *root,
9191
u16 csum_size = btrfs_super_csum_size(root->fs_info->super_copy);
9292

9393
return sizeof(struct compressed_bio) +
94-
(DIV_ROUND_UP(disk_size, root->sectorsize)) * csum_size;
94+
(DIV_ROUND_UP(disk_size, root->fs_info->sectorsize)) * csum_size;
9595
}
9696

9797
static struct bio *compressed_bio_alloc(struct block_device *bdev,
@@ -696,7 +696,7 @@ int btrfs_submit_compressed_read(struct inode *inode, struct bio *bio,
696696
BUG_ON(ret); /* -ENOMEM */
697697
}
698698
sums += DIV_ROUND_UP(comp_bio->bi_iter.bi_size,
699-
root->sectorsize);
699+
root->fs_info->sectorsize);
700700

701701
ret = btrfs_map_bio(root, comp_bio, mirror_num, 0);
702702
if (ret) {

fs/btrfs/ctree.c

Lines changed: 39 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1357,8 +1357,7 @@ tree_mod_log_rewind(struct btrfs_fs_info *fs_info, struct btrfs_path *path,
13571357

13581358
if (tm->op == MOD_LOG_KEY_REMOVE_WHILE_FREEING) {
13591359
BUG_ON(tm->slot != 0);
1360-
eb_rewin = alloc_dummy_extent_buffer(fs_info, eb->start,
1361-
eb->len);
1360+
eb_rewin = alloc_dummy_extent_buffer(fs_info, eb->start);
13621361
if (!eb_rewin) {
13631362
btrfs_tree_read_unlock_blocking(eb);
13641363
free_extent_buffer(eb);
@@ -1386,7 +1385,7 @@ tree_mod_log_rewind(struct btrfs_fs_info *fs_info, struct btrfs_path *path,
13861385
btrfs_tree_read_lock(eb_rewin);
13871386
__tree_mod_log_rewind(fs_info, eb_rewin, time_seq, tm);
13881387
WARN_ON(btrfs_header_nritems(eb_rewin) >
1389-
BTRFS_NODEPTRS_PER_BLOCK(fs_info->tree_root));
1388+
BTRFS_NODEPTRS_PER_BLOCK(fs_info));
13901389

13911390
return eb_rewin;
13921391
}
@@ -1439,8 +1438,7 @@ get_old_root(struct btrfs_root *root, u64 time_seq)
14391438
} else if (old_root) {
14401439
btrfs_tree_read_unlock(eb_root);
14411440
free_extent_buffer(eb_root);
1442-
eb = alloc_dummy_extent_buffer(root->fs_info, logical,
1443-
root->nodesize);
1441+
eb = alloc_dummy_extent_buffer(root->fs_info, logical);
14441442
} else {
14451443
btrfs_set_lock_blocking_rw(eb_root, BTRFS_READ_LOCK);
14461444
eb = btrfs_clone_extent_buffer(eb_root);
@@ -1463,7 +1461,7 @@ get_old_root(struct btrfs_root *root, u64 time_seq)
14631461
__tree_mod_log_rewind(root->fs_info, eb, time_seq, tm);
14641462
else
14651463
WARN_ON(btrfs_header_level(eb) != 0);
1466-
WARN_ON(btrfs_header_nritems(eb) > BTRFS_NODEPTRS_PER_BLOCK(root));
1464+
WARN_ON(btrfs_header_nritems(eb) > BTRFS_NODEPTRS_PER_BLOCK(root->fs_info));
14671465

14681466
return eb;
14691467
}
@@ -1634,7 +1632,7 @@ int btrfs_realloc_node(struct btrfs_trans_handle *trans,
16341632
WARN_ON(trans->transid != root->fs_info->generation);
16351633

16361634
parent_nritems = btrfs_header_nritems(parent);
1637-
blocksize = root->nodesize;
1635+
blocksize = root->fs_info->nodesize;
16381636
end_slot = parent_nritems - 1;
16391637

16401638
if (parent_nritems <= 1)
@@ -1940,7 +1938,7 @@ static noinline int balance_level(struct btrfs_trans_handle *trans,
19401938
return 0;
19411939
}
19421940
if (btrfs_header_nritems(mid) >
1943-
BTRFS_NODEPTRS_PER_BLOCK(root) / 4)
1941+
BTRFS_NODEPTRS_PER_BLOCK(root->fs_info) / 4)
19441942
return 0;
19451943

19461944
left = read_node_slot(root, parent, pslot - 1);
@@ -2127,7 +2125,7 @@ static noinline int push_nodes_for_insert(struct btrfs_trans_handle *trans,
21272125
btrfs_set_lock_blocking(left);
21282126

21292127
left_nr = btrfs_header_nritems(left);
2130-
if (left_nr >= BTRFS_NODEPTRS_PER_BLOCK(root) - 1) {
2128+
if (left_nr >= BTRFS_NODEPTRS_PER_BLOCK(root->fs_info) - 1) {
21312129
wret = 1;
21322130
} else {
21332131
ret = btrfs_cow_block(trans, root, left, parent,
@@ -2181,7 +2179,7 @@ static noinline int push_nodes_for_insert(struct btrfs_trans_handle *trans,
21812179
btrfs_set_lock_blocking(right);
21822180

21832181
right_nr = btrfs_header_nritems(right);
2184-
if (right_nr >= BTRFS_NODEPTRS_PER_BLOCK(root) - 1) {
2182+
if (right_nr >= BTRFS_NODEPTRS_PER_BLOCK(root->fs_info) - 1) {
21852183
wret = 1;
21862184
} else {
21872185
ret = btrfs_cow_block(trans, root, right,
@@ -2252,7 +2250,7 @@ static void reada_for_search(struct btrfs_root *root,
22522250
node = path->nodes[level];
22532251

22542252
search = btrfs_node_blockptr(node, slot);
2255-
blocksize = root->nodesize;
2253+
blocksize = root->fs_info->nodesize;
22562254
eb = find_extent_buffer(root->fs_info, search);
22572255
if (eb) {
22582256
free_extent_buffer(eb);
@@ -2521,7 +2519,7 @@ setup_nodes_for_search(struct btrfs_trans_handle *trans,
25212519
{
25222520
int ret;
25232521
if ((p->search_for_split || ins_len > 0) && btrfs_header_nritems(b) >=
2524-
BTRFS_NODEPTRS_PER_BLOCK(root) - 3) {
2522+
BTRFS_NODEPTRS_PER_BLOCK(root->fs_info) - 3) {
25252523
int sret;
25262524

25272525
if (*write_lock_level < level + 1) {
@@ -2542,7 +2540,7 @@ setup_nodes_for_search(struct btrfs_trans_handle *trans,
25422540
}
25432541
b = p->nodes[level];
25442542
} else if (ins_len < 0 && btrfs_header_nritems(b) <
2545-
BTRFS_NODEPTRS_PER_BLOCK(root) / 2) {
2543+
BTRFS_NODEPTRS_PER_BLOCK(root->fs_info) / 2) {
25462544
int sret;
25472545

25482546
if (*write_lock_level < level + 1) {
@@ -3195,7 +3193,7 @@ static int push_node_left(struct btrfs_trans_handle *trans,
31953193

31963194
src_nritems = btrfs_header_nritems(src);
31973195
dst_nritems = btrfs_header_nritems(dst);
3198-
push_items = BTRFS_NODEPTRS_PER_BLOCK(root) - dst_nritems;
3196+
push_items = BTRFS_NODEPTRS_PER_BLOCK(root->fs_info) - dst_nritems;
31993197
WARN_ON(btrfs_header_generation(src) != trans->transid);
32003198
WARN_ON(btrfs_header_generation(dst) != trans->transid);
32013199

@@ -3274,7 +3272,7 @@ static int balance_node_right(struct btrfs_trans_handle *trans,
32743272

32753273
src_nritems = btrfs_header_nritems(src);
32763274
dst_nritems = btrfs_header_nritems(dst);
3277-
push_items = BTRFS_NODEPTRS_PER_BLOCK(root) - dst_nritems;
3275+
push_items = BTRFS_NODEPTRS_PER_BLOCK(root->fs_info) - dst_nritems;
32783276
if (push_items <= 0)
32793277
return 1;
32803278

@@ -3346,7 +3344,7 @@ static noinline int insert_new_root(struct btrfs_trans_handle *trans,
33463344
if (IS_ERR(c))
33473345
return PTR_ERR(c);
33483346

3349-
root_add_used(root, root->nodesize);
3347+
root_add_used(root, root->fs_info->nodesize);
33503348

33513349
memzero_extent_buffer(c, 0, sizeof(struct btrfs_header));
33523350
btrfs_set_header_nritems(c, 1);
@@ -3404,7 +3402,7 @@ static void insert_ptr(struct btrfs_trans_handle *trans,
34043402
lower = path->nodes[level];
34053403
nritems = btrfs_header_nritems(lower);
34063404
BUG_ON(slot > nritems);
3407-
BUG_ON(nritems == BTRFS_NODEPTRS_PER_BLOCK(root));
3405+
BUG_ON(nritems == BTRFS_NODEPTRS_PER_BLOCK(root->fs_info));
34083406
if (slot != nritems) {
34093407
if (level)
34103408
tree_mod_log_eb_move(root->fs_info, lower, slot + 1,
@@ -3467,7 +3465,7 @@ static noinline int split_node(struct btrfs_trans_handle *trans,
34673465
ret = push_nodes_for_insert(trans, root, path, level);
34683466
c = path->nodes[level];
34693467
if (!ret && btrfs_header_nritems(c) <
3470-
BTRFS_NODEPTRS_PER_BLOCK(root) - 3)
3468+
BTRFS_NODEPTRS_PER_BLOCK(root->fs_info) - 3)
34713469
return 0;
34723470
if (ret < 0)
34733471
return ret;
@@ -3482,7 +3480,7 @@ static noinline int split_node(struct btrfs_trans_handle *trans,
34823480
if (IS_ERR(split))
34833481
return PTR_ERR(split);
34843482

3485-
root_add_used(root, root->nodesize);
3483+
root_add_used(root, root->fs_info->nodesize);
34863484

34873485
memzero_extent_buffer(split, 0, sizeof(struct btrfs_header));
34883486
btrfs_set_header_level(split, btrfs_header_level(c));
@@ -3564,11 +3562,12 @@ noinline int btrfs_leaf_free_space(struct btrfs_root *root,
35643562
{
35653563
int nritems = btrfs_header_nritems(leaf);
35663564
int ret;
3567-
ret = BTRFS_LEAF_DATA_SIZE(root) - leaf_space_used(leaf, 0, nritems);
3565+
ret = BTRFS_LEAF_DATA_SIZE(root->fs_info) - leaf_space_used(leaf, 0, nritems);
35683566
if (ret < 0) {
35693567
btrfs_crit(root->fs_info,
35703568
"leaf free space ret %d, leaf data size %lu, used %d nritems %d",
3571-
ret, (unsigned long) BTRFS_LEAF_DATA_SIZE(root),
3569+
ret,
3570+
(unsigned long) BTRFS_LEAF_DATA_SIZE(root->fs_info),
35723571
leaf_space_used(leaf, 0, nritems), nritems);
35733572
}
35743573
return ret;
@@ -3655,11 +3654,11 @@ static noinline int __push_leaf_right(struct btrfs_trans_handle *trans,
36553654
memmove_extent_buffer(right,
36563655
btrfs_leaf_data(right) + data_end - push_space,
36573656
btrfs_leaf_data(right) + data_end,
3658-
BTRFS_LEAF_DATA_SIZE(root) - data_end);
3657+
BTRFS_LEAF_DATA_SIZE(root->fs_info) - data_end);
36593658

36603659
/* copy from the left data area */
36613660
copy_extent_buffer(right, left, btrfs_leaf_data(right) +
3662-
BTRFS_LEAF_DATA_SIZE(root) - push_space,
3661+
BTRFS_LEAF_DATA_SIZE(root->fs_info) - push_space,
36633662
btrfs_leaf_data(left) + leaf_data_end(root, left),
36643663
push_space);
36653664

@@ -3675,7 +3674,7 @@ static noinline int __push_leaf_right(struct btrfs_trans_handle *trans,
36753674
/* update the item pointers */
36763675
right_nritems += push_items;
36773676
btrfs_set_header_nritems(right, right_nritems);
3678-
push_space = BTRFS_LEAF_DATA_SIZE(root);
3677+
push_space = BTRFS_LEAF_DATA_SIZE(root->fs_info);
36793678
for (i = 0; i < right_nritems; i++) {
36803679
item = btrfs_item_nr(i);
36813680
push_space -= btrfs_token_item_size(right, item, &token);
@@ -3871,7 +3870,7 @@ static noinline int __push_leaf_left(struct btrfs_trans_handle *trans,
38713870
btrfs_item_nr_offset(0),
38723871
push_items * sizeof(struct btrfs_item));
38733872

3874-
push_space = BTRFS_LEAF_DATA_SIZE(root) -
3873+
push_space = BTRFS_LEAF_DATA_SIZE(root->fs_info) -
38753874
btrfs_item_offset_nr(right, push_items - 1);
38763875

38773876
copy_extent_buffer(left, right, btrfs_leaf_data(left) +
@@ -3890,7 +3889,7 @@ static noinline int __push_leaf_left(struct btrfs_trans_handle *trans,
38903889

38913890
ioff = btrfs_token_item_offset(left, item, &token);
38923891
btrfs_set_token_item_offset(left, item,
3893-
ioff - (BTRFS_LEAF_DATA_SIZE(root) - old_left_item_size),
3892+
ioff - (BTRFS_LEAF_DATA_SIZE(root->fs_info) - old_left_item_size),
38943893
&token);
38953894
}
38963895
btrfs_set_header_nritems(left, old_left_nritems + push_items);
@@ -3904,7 +3903,7 @@ static noinline int __push_leaf_left(struct btrfs_trans_handle *trans,
39043903
push_space = btrfs_item_offset_nr(right, push_items - 1) -
39053904
leaf_data_end(root, right);
39063905
memmove_extent_buffer(right, btrfs_leaf_data(right) +
3907-
BTRFS_LEAF_DATA_SIZE(root) - push_space,
3906+
BTRFS_LEAF_DATA_SIZE(root->fs_info) - push_space,
39083907
btrfs_leaf_data(right) +
39093908
leaf_data_end(root, right), push_space);
39103909

@@ -3915,7 +3914,7 @@ static noinline int __push_leaf_left(struct btrfs_trans_handle *trans,
39153914
}
39163915
right_nritems -= push_items;
39173916
btrfs_set_header_nritems(right, right_nritems);
3918-
push_space = BTRFS_LEAF_DATA_SIZE(root);
3917+
push_space = BTRFS_LEAF_DATA_SIZE(root->fs_info);
39193918
for (i = 0; i < right_nritems; i++) {
39203919
item = btrfs_item_nr(i);
39213920

@@ -4054,11 +4053,11 @@ static noinline void copy_for_split(struct btrfs_trans_handle *trans,
40544053
nritems * sizeof(struct btrfs_item));
40554054

40564055
copy_extent_buffer(right, l,
4057-
btrfs_leaf_data(right) + BTRFS_LEAF_DATA_SIZE(root) -
4056+
btrfs_leaf_data(right) + BTRFS_LEAF_DATA_SIZE(root->fs_info) -
40584057
data_copy_size, btrfs_leaf_data(l) +
40594058
leaf_data_end(root, l), data_copy_size);
40604059

4061-
rt_data_off = BTRFS_LEAF_DATA_SIZE(root) -
4060+
rt_data_off = BTRFS_LEAF_DATA_SIZE(root->fs_info) -
40624061
btrfs_item_end_nr(l, mid);
40634062

40644063
for (i = 0; i < nritems; i++) {
@@ -4182,7 +4181,7 @@ static noinline int split_leaf(struct btrfs_trans_handle *trans,
41824181
l = path->nodes[0];
41834182
slot = path->slots[0];
41844183
if (extend && data_size + btrfs_item_size_nr(l, slot) +
4185-
sizeof(struct btrfs_item) > BTRFS_LEAF_DATA_SIZE(root))
4184+
sizeof(struct btrfs_item) > BTRFS_LEAF_DATA_SIZE(root->fs_info))
41864185
return -EOVERFLOW;
41874186

41884187
/* first try to make some room by pushing left and right */
@@ -4224,14 +4223,14 @@ static noinline int split_leaf(struct btrfs_trans_handle *trans,
42244223
if (mid <= slot) {
42254224
if (nritems == 1 ||
42264225
leaf_space_used(l, mid, nritems - mid) + data_size >
4227-
BTRFS_LEAF_DATA_SIZE(root)) {
4226+
BTRFS_LEAF_DATA_SIZE(root->fs_info)) {
42284227
if (slot >= nritems) {
42294228
split = 0;
42304229
} else {
42314230
mid = slot;
42324231
if (mid != nritems &&
42334232
leaf_space_used(l, mid, nritems - mid) +
4234-
data_size > BTRFS_LEAF_DATA_SIZE(root)) {
4233+
data_size > BTRFS_LEAF_DATA_SIZE(root->fs_info)) {
42354234
if (data_size && !tried_avoid_double)
42364235
goto push_for_double;
42374236
split = 2;
@@ -4240,7 +4239,7 @@ static noinline int split_leaf(struct btrfs_trans_handle *trans,
42404239
}
42414240
} else {
42424241
if (leaf_space_used(l, 0, mid) + data_size >
4243-
BTRFS_LEAF_DATA_SIZE(root)) {
4242+
BTRFS_LEAF_DATA_SIZE(root->fs_info)) {
42444243
if (!extend && data_size && slot == 0) {
42454244
split = 0;
42464245
} else if ((extend || !data_size) && slot == 0) {
@@ -4249,7 +4248,7 @@ static noinline int split_leaf(struct btrfs_trans_handle *trans,
42494248
mid = slot;
42504249
if (mid != nritems &&
42514250
leaf_space_used(l, mid, nritems - mid) +
4252-
data_size > BTRFS_LEAF_DATA_SIZE(root)) {
4251+
data_size > BTRFS_LEAF_DATA_SIZE(root->fs_info)) {
42534252
if (data_size && !tried_avoid_double)
42544253
goto push_for_double;
42554254
split = 2;
@@ -4268,7 +4267,7 @@ static noinline int split_leaf(struct btrfs_trans_handle *trans,
42684267
if (IS_ERR(right))
42694268
return PTR_ERR(right);
42704269

4271-
root_add_used(root, root->nodesize);
4270+
root_add_used(root, root->fs_info->nodesize);
42724271

42734272
memzero_extent_buffer(right, 0, sizeof(struct btrfs_header));
42744273
btrfs_set_header_bytenr(right, right->start);
@@ -5001,7 +5000,7 @@ int btrfs_del_items(struct btrfs_trans_handle *trans, struct btrfs_root *root,
50015000
}
50025001

50035002
/* delete the leaf if it is mostly empty */
5004-
if (used < BTRFS_LEAF_DATA_SIZE(root) / 3) {
5003+
if (used < BTRFS_LEAF_DATA_SIZE(root->fs_info) / 3) {
50055004
/* push_leaf_left fixes the path.
50065005
* make sure the path still points to our leaf
50075006
* for possible call to del_ptr below
@@ -5369,9 +5368,10 @@ int btrfs_compare_trees(struct btrfs_root *left_root,
53695368
goto out;
53705369
}
53715370

5372-
tmp_buf = kmalloc(left_root->nodesize, GFP_KERNEL | __GFP_NOWARN);
5371+
tmp_buf = kmalloc(left_root->fs_info->nodesize,
5372+
GFP_KERNEL | __GFP_NOWARN);
53735373
if (!tmp_buf) {
5374-
tmp_buf = vmalloc(left_root->nodesize);
5374+
tmp_buf = vmalloc(left_root->fs_info->nodesize);
53755375
if (!tmp_buf) {
53765376
ret = -ENOMEM;
53775377
goto out;

0 commit comments

Comments
 (0)