Commit b263c2c8 authored by Chris Mason's avatar Chris Mason

Btrfs: fix extent_buffer leak during tree log replay

During tree log replay, we read in the tree log roots,
process them and then free them.  A recent change
takes an extra reference on the root node of the tree
when the root is read in, and stores that reference
in root->commit_root.

This reference was not being freed, leaving us with
one buffer pinned in ram for each subvol with
a tree log root after a crash.
Signed-off-by: default avatarChris Mason <chris.mason@oracle.com>
parent 0b4dcea5
...@@ -3019,6 +3019,7 @@ int btrfs_recover_log_trees(struct btrfs_root *log_root_tree) ...@@ -3019,6 +3019,7 @@ int btrfs_recover_log_trees(struct btrfs_root *log_root_tree)
key.offset = found_key.offset - 1; key.offset = found_key.offset - 1;
wc.replay_dest->log_root = NULL; wc.replay_dest->log_root = NULL;
free_extent_buffer(log->node); free_extent_buffer(log->node);
free_extent_buffer(log->commit_root);
kfree(log); kfree(log);
if (found_key.offset == 0) if (found_key.offset == 0)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment