diff options
author | Qu Wenruo <wqu@suse.com> | 2018-04-23 17:32:04 +0800 |
---|---|---|
committer | David Sterba <dsterba@suse.com> | 2018-04-26 13:21:04 +0200 |
commit | 17515f1b764df36271f3166c714f5a78301fbaa7 (patch) | |
tree | b03966bbc605fe3fb520fb71278086b22d9dd11e /fs/btrfs/relocation.c | |
parent | c0872323746e11fc79344e3738b283a8cda86654 (diff) | |
download | op-kernel-dev-17515f1b764df36271f3166c714f5a78301fbaa7.zip op-kernel-dev-17515f1b764df36271f3166c714f5a78301fbaa7.tar.gz |
btrfs: Fix wrong first_key parameter in replace_path
Commit 581c1760415c ("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: 581c1760415c ("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>
Diffstat (limited to 'fs/btrfs/relocation.c')
-rw-r--r-- | fs/btrfs/relocation.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/fs/btrfs/relocation.c b/fs/btrfs/relocation.c index 00b7d32..b041b94 100644 --- a/fs/btrfs/relocation.c +++ b/fs/btrfs/relocation.c @@ -1841,7 +1841,7 @@ again: old_bytenr = btrfs_node_blockptr(parent, slot); blocksize = fs_info->nodesize; 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) { eb = path->nodes[level]; |