btrfs: sink blocksize parameter to btrfs_find_create_tree_block
Finally it's clear that the requested blocksize is always equal to nodesize, with one exception, the superblock. Superblock has fixed size regardless of the metadata block size, but uses the same helpers to initialize sys array/chunk tree and to work with the chunk items. So it pretends to be an extent_buffer for a moment, btrfs_read_sys_array is full of special cases, we're adding one more. Signed-off-by: David Sterba <dsterba@suse.cz>
This commit is contained in:
parent
fe864576de
commit
a83fffb75d
|
@ -1078,7 +1078,7 @@ void readahead_tree_block(struct btrfs_root *root, u64 bytenr)
|
||||||
struct extent_buffer *buf = NULL;
|
struct extent_buffer *buf = NULL;
|
||||||
struct inode *btree_inode = root->fs_info->btree_inode;
|
struct inode *btree_inode = root->fs_info->btree_inode;
|
||||||
|
|
||||||
buf = btrfs_find_create_tree_block(root, bytenr, root->nodesize);
|
buf = btrfs_find_create_tree_block(root, bytenr);
|
||||||
if (!buf)
|
if (!buf)
|
||||||
return;
|
return;
|
||||||
read_extent_buffer_pages(&BTRFS_I(btree_inode)->io_tree,
|
read_extent_buffer_pages(&BTRFS_I(btree_inode)->io_tree,
|
||||||
|
@ -1094,7 +1094,7 @@ int reada_tree_block_flagged(struct btrfs_root *root, u64 bytenr,
|
||||||
struct extent_io_tree *io_tree = &BTRFS_I(btree_inode)->io_tree;
|
struct extent_io_tree *io_tree = &BTRFS_I(btree_inode)->io_tree;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
buf = btrfs_find_create_tree_block(root, bytenr, root->nodesize);
|
buf = btrfs_find_create_tree_block(root, bytenr);
|
||||||
if (!buf)
|
if (!buf)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
@ -1125,12 +1125,12 @@ struct extent_buffer *btrfs_find_tree_block(struct btrfs_root *root,
|
||||||
}
|
}
|
||||||
|
|
||||||
struct extent_buffer *btrfs_find_create_tree_block(struct btrfs_root *root,
|
struct extent_buffer *btrfs_find_create_tree_block(struct btrfs_root *root,
|
||||||
u64 bytenr, u32 blocksize)
|
u64 bytenr)
|
||||||
{
|
{
|
||||||
if (btrfs_test_is_dummy_root(root))
|
if (btrfs_test_is_dummy_root(root))
|
||||||
return alloc_test_extent_buffer(root->fs_info, bytenr,
|
return alloc_test_extent_buffer(root->fs_info, bytenr,
|
||||||
blocksize);
|
root->nodesize);
|
||||||
return alloc_extent_buffer(root->fs_info, bytenr, blocksize);
|
return alloc_extent_buffer(root->fs_info, bytenr, root->nodesize);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1152,7 +1152,7 @@ struct extent_buffer *read_tree_block(struct btrfs_root *root, u64 bytenr,
|
||||||
struct extent_buffer *buf = NULL;
|
struct extent_buffer *buf = NULL;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
buf = btrfs_find_create_tree_block(root, bytenr, root->nodesize);
|
buf = btrfs_find_create_tree_block(root, bytenr);
|
||||||
if (!buf)
|
if (!buf)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
|
|
|
@ -50,7 +50,7 @@ void readahead_tree_block(struct btrfs_root *root, u64 bytenr);
|
||||||
int reada_tree_block_flagged(struct btrfs_root *root, u64 bytenr,
|
int reada_tree_block_flagged(struct btrfs_root *root, u64 bytenr,
|
||||||
int mirror_num, struct extent_buffer **eb);
|
int mirror_num, struct extent_buffer **eb);
|
||||||
struct extent_buffer *btrfs_find_create_tree_block(struct btrfs_root *root,
|
struct extent_buffer *btrfs_find_create_tree_block(struct btrfs_root *root,
|
||||||
u64 bytenr, u32 blocksize);
|
u64 bytenr);
|
||||||
void clean_tree_block(struct btrfs_trans_handle *trans,
|
void clean_tree_block(struct btrfs_trans_handle *trans,
|
||||||
struct btrfs_root *root, struct extent_buffer *buf);
|
struct btrfs_root *root, struct extent_buffer *buf);
|
||||||
int open_ctree(struct super_block *sb,
|
int open_ctree(struct super_block *sb,
|
||||||
|
|
|
@ -7219,7 +7219,7 @@ btrfs_init_new_buffer(struct btrfs_trans_handle *trans, struct btrfs_root *root,
|
||||||
{
|
{
|
||||||
struct extent_buffer *buf;
|
struct extent_buffer *buf;
|
||||||
|
|
||||||
buf = btrfs_find_create_tree_block(root, bytenr, root->nodesize);
|
buf = btrfs_find_create_tree_block(root, bytenr);
|
||||||
if (!buf)
|
if (!buf)
|
||||||
return ERR_PTR(-ENOMEM);
|
return ERR_PTR(-ENOMEM);
|
||||||
btrfs_set_header_generation(buf, trans->transid);
|
btrfs_set_header_generation(buf, trans->transid);
|
||||||
|
@ -7825,7 +7825,7 @@ static noinline int do_walk_down(struct btrfs_trans_handle *trans,
|
||||||
|
|
||||||
next = btrfs_find_tree_block(root, bytenr);
|
next = btrfs_find_tree_block(root, bytenr);
|
||||||
if (!next) {
|
if (!next) {
|
||||||
next = btrfs_find_create_tree_block(root, bytenr, blocksize);
|
next = btrfs_find_create_tree_block(root, bytenr);
|
||||||
if (!next)
|
if (!next)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
btrfs_set_buffer_lockdep_class(root->root_key.objectid, next,
|
btrfs_set_buffer_lockdep_class(root->root_key.objectid, next,
|
||||||
|
|
|
@ -2164,7 +2164,7 @@ static noinline int walk_down_log_tree(struct btrfs_trans_handle *trans,
|
||||||
parent = path->nodes[*level];
|
parent = path->nodes[*level];
|
||||||
root_owner = btrfs_header_owner(parent);
|
root_owner = btrfs_header_owner(parent);
|
||||||
|
|
||||||
next = btrfs_find_create_tree_block(root, bytenr, blocksize);
|
next = btrfs_find_create_tree_block(root, bytenr);
|
||||||
if (!next)
|
if (!next)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
|
|
|
@ -6247,8 +6247,13 @@ int btrfs_read_sys_array(struct btrfs_root *root)
|
||||||
u32 cur;
|
u32 cur;
|
||||||
struct btrfs_key key;
|
struct btrfs_key key;
|
||||||
|
|
||||||
sb = btrfs_find_create_tree_block(root, BTRFS_SUPER_INFO_OFFSET,
|
ASSERT(BTRFS_SUPER_INFO_SIZE <= root->nodesize);
|
||||||
BTRFS_SUPER_INFO_SIZE);
|
/*
|
||||||
|
* This will create extent buffer of nodesize, superblock size is
|
||||||
|
* fixed to BTRFS_SUPER_INFO_SIZE. If nodesize > sb size, this will
|
||||||
|
* overallocate but we can keep it as-is, only the first page is used.
|
||||||
|
*/
|
||||||
|
sb = btrfs_find_create_tree_block(root, BTRFS_SUPER_INFO_OFFSET);
|
||||||
if (!sb)
|
if (!sb)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
btrfs_set_buffer_uptodate(sb);
|
btrfs_set_buffer_uptodate(sb);
|
||||||
|
|
Loading…
Reference in New Issue