diff options
author | Chris Mason <chris.mason@oracle.com> | 2009-06-11 11:24:47 -0400 |
---|---|---|
committer | Chris Mason <chris.mason@oracle.com> | 2009-06-11 11:24:47 -0400 |
commit | b263c2c8bf13c273485bd99dbbeba79c844409dd (patch) | |
tree | 8816eaabd20cfce5e37432ecf61cc8303863c48d /fs/btrfs | |
parent | 0b4dcea579a1b6f4d249d61f5bc8adeaa7c895d8 (diff) |
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: Chris Mason <chris.mason@oracle.com>
Diffstat (limited to 'fs/btrfs')
-rw-r--r-- | fs/btrfs/tree-log.c | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/fs/btrfs/tree-log.c b/fs/btrfs/tree-log.c index 2b41fc08c34a..c13922206d1b 100644 --- a/fs/btrfs/tree-log.c +++ b/fs/btrfs/tree-log.c | |||
@@ -3019,6 +3019,7 @@ again: | |||
3019 | key.offset = found_key.offset - 1; | 3019 | key.offset = found_key.offset - 1; |
3020 | wc.replay_dest->log_root = NULL; | 3020 | wc.replay_dest->log_root = NULL; |
3021 | free_extent_buffer(log->node); | 3021 | free_extent_buffer(log->node); |
3022 | free_extent_buffer(log->commit_root); | ||
3022 | kfree(log); | 3023 | kfree(log); |
3023 | 3024 | ||
3024 | if (found_key.offset == 0) | 3025 | if (found_key.offset == 0) |