diff options
Diffstat (limited to '0001-btrfs-fix-memory-leak-of-transaction-when-deleting-u.patch')
-rw-r--r-- | 0001-btrfs-fix-memory-leak-of-transaction-when-deleting-u.patch | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/0001-btrfs-fix-memory-leak-of-transaction-when-deleting-u.patch b/0001-btrfs-fix-memory-leak-of-transaction-when-deleting-u.patch new file mode 100644 index 000000000..5b9bd2cc1 --- /dev/null +++ b/0001-btrfs-fix-memory-leak-of-transaction-when-deleting-u.patch @@ -0,0 +1,45 @@ +From 5150bf19635c335109542c19f6b84c7813810873 Mon Sep 17 00:00:00 2001 +From: Filipe Manana <fdmanana@suse.com> +Date: Fri, 17 Apr 2020 16:36:15 +0100 +Subject: [PATCH] btrfs: fix memory leak of transaction when deleting unused + block group + +When cleaning pinned extents right before deleting an unused block group, +we check if there's still a previous transaction running and if so we +increment its reference count before using it for cleaning pinned ranges +in its pinned extents iotree. However we ended up never decrementing the +reference count after using the transaction, resulting in a memory leak. + +Fix it by decrementing the reference count. + +Fixes: fe119a6eeb6705 ("btrfs: switch to per-transaction pinned extents") +Signed-off-by: Filipe Manana <fdmanana@suse.com> +Reviewed-by: David Sterba <dsterba@suse.com> +Signed-off-by: David Sterba <dsterba@suse.com> +--- + fs/btrfs/block-group.c | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/fs/btrfs/block-group.c b/fs/btrfs/block-group.c +index 47f66c6a7d7f..af9e9a008724 100644 +--- a/fs/btrfs/block-group.c ++++ b/fs/btrfs/block-group.c +@@ -1288,11 +1288,15 @@ static bool clean_pinned_extents(struct btrfs_trans_handle *trans, + if (ret) + goto err; + mutex_unlock(&fs_info->unused_bg_unpin_mutex); ++ if (prev_trans) ++ btrfs_put_transaction(prev_trans); + + return true; + + err: + mutex_unlock(&fs_info->unused_bg_unpin_mutex); ++ if (prev_trans) ++ btrfs_put_transaction(prev_trans); + btrfs_dec_block_group_ro(bg); + return false; + } +-- +2.26.2 + |