btrfs: Fix wrong first_key parameter in replace_path
Commit581c176041
("btrfs: Validate child tree block's level and first key") introduced new @first_key parameter for read_tree_block(), however caller in replace_path() is parasing wrong key to read_tree_block(). It should use parameter @first_key other than @key. Normally it won't expose problem as @key is normally initialzied to the same value of @first_key we expect. However in relocation recovery case, @key can be set to (0, 0, 0), and since no valid key in relocation tree can be (0, 0, 0), it will cause read_tree_block() to return -EUCLEAN and interrupt relocation recovery. Fix it by setting @first_key correctly. Fixes:581c176041
("btrfs: Validate child tree block's level and first key") Signed-off-by: Qu Wenruo <wqu@suse.com> Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
parent
c087232374
commit
17515f1b76
1 changed files with 1 additions and 1 deletions
|
@ -1841,7 +1841,7 @@ int replace_path(struct btrfs_trans_handle *trans,
|
||||||
old_bytenr = btrfs_node_blockptr(parent, slot);
|
old_bytenr = btrfs_node_blockptr(parent, slot);
|
||||||
blocksize = fs_info->nodesize;
|
blocksize = fs_info->nodesize;
|
||||||
old_ptr_gen = btrfs_node_ptr_generation(parent, slot);
|
old_ptr_gen = btrfs_node_ptr_generation(parent, slot);
|
||||||
btrfs_node_key_to_cpu(parent, &key, slot);
|
btrfs_node_key_to_cpu(parent, &first_key, slot);
|
||||||
|
|
||||||
if (level <= max_level) {
|
if (level <= max_level) {
|
||||||
eb = path->nodes[level];
|
eb = path->nodes[level];
|
||||||
|
|
Loading…
Reference in a new issue