]> git.baikalelectronics.ru Git - kernel.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 08:50:15 +0000 (10:50 +0200)
commit9879b194a958a2058b414b8c6a78a4dbe4b7c5c4
tree20ef2974a39ec4e02b395b26494f3843cb1cceab
parent0298337abcbaa76bcde5e3211d9b49c1bb8d59ae
btrfs: drop block from cache on error in relocation

commit 307c15ca9f8689f5beb372823fe859ac1dfeebe6 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