aboutsummaryrefslogtreecommitdiffstats
path: root/fs/btrfs/tree-log.c
diff options
context:
space:
mode:
authorChris Mason <chris.mason@oracle.com>2009-06-11 11:24:47 -0400
committerChris Mason <chris.mason@oracle.com>2009-06-11 11:24:47 -0400
commitb263c2c8bf13c273485bd99dbbeba79c844409dd (patch)
tree8816eaabd20cfce5e37432ecf61cc8303863c48d /fs/btrfs/tree-log.c
parent0b4dcea579a1b6f4d249d61f5bc8adeaa7c895d8 (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/tree-log.c')
-rw-r--r--fs/btrfs/tree-log.c1
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)