]> git.ipfire.org Git - thirdparty/kernel/stable.git/commit
btrfs: drop block from cache on error in relocation
authorJosef Bacik <josef@toxicpanda.com>
Wed, 4 Mar 2020 16:18:23 +0000 (11:18 -0500)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 17 Apr 2020 14:13:35 +0000 (16:13 +0200)
commit69e4552427158621cb2d53f1c9f0524bec9cecd7
treecfafd32ccc2a2e51fea25402f0bab8e425098442
parent706cd9e4e23ab6e422673b6d5954372563f4c390
btrfs: drop block from cache on error in relocation

commit 8e19c9732ad1d127b5575a10f4fbcacf740500ff upstream.

If we have an error while building the backref tree in relocation we'll
process all the pending edges and then free the node.  However if we
integrated some edges into the cache we'll lose our link to those edges
by simply freeing this node, which means we'll leak memory and
references to any roots that we've found.

Instead we need to use remove_backref_node(), which walks through all of
the edges that are still linked to this node and free's them up and
drops any root references we may be holding.

CC: stable@vger.kernel.org # 4.9+
Reviewed-by: Qu Wenruo <wqu@suse.com>
Signed-off-by: Josef Bacik <josef@toxicpanda.com>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
fs/btrfs/relocation.c