summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLiu Bo <liubo2009@cn.fujitsu.com>2012-06-14 02:23:20 -0600
committerChris Mason <chris.mason@fusionio.com>2012-06-15 11:42:27 -0400
commit6e841e32b159e298debbb2cb0e9158e894fcaf05 (patch)
tree283946b4a93289a2e667ab729bdd962a52a67d6e
parent4e42ae1bdcda77fc958a17d7ff4ba5a9c9c207da (diff)
downloadlinux-6e841e32b159e298debbb2cb0e9158e894fcaf05.tar.gz
linux-6e841e32b159e298debbb2cb0e9158e894fcaf05.tar.bz2
linux-6e841e32b159e298debbb2cb0e9158e894fcaf05.zip
Btrfs: avoid memory leak of extent state in error handling routine
We've forgotten to clear extent states in pinned tree, which will results in space counter mismatch and memory leak: WARNING: at fs/btrfs/extent-tree.c:7537 btrfs_free_block_groups+0x1f3/0x2e0 [btrfs]() ... space_info 2 has 8380416 free, is not full space_info total=12582912, used=4096, pinned=4096, reserved=0, may_use=0, readonly=4194304 btrfs state leak: start 29364224 end 29376511 state 1 in tree ffff880075f20090 refs 1 ... Signed-off-by: Liu Bo <liubo2009@cn.fujitsu.com> Signed-off-by: Chris Mason <chris.mason@fusionio.com>
-rw-r--r--fs/btrfs/disk-io.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c
index 9a569aef72ea..63a36232788b 100644
--- a/fs/btrfs/disk-io.c
+++ b/fs/btrfs/disk-io.c
@@ -3601,6 +3601,8 @@ void btrfs_cleanup_one_transaction(struct btrfs_transaction *cur_trans,
btrfs_destroy_marked_extents(root, &cur_trans->dirty_pages,
EXTENT_DIRTY);
+ btrfs_destroy_pinned_extent(root,
+ root->fs_info->pinned_extents);
/*
memset(cur_trans, 0, sizeof(*cur_trans));