summaryrefslogtreecommitdiffstats
path: root/0001-btrfs-fix-memory-leak-of-transaction-when-deleting-u.patch
diff options
context:
space:
mode:
authorThorsten Leemhuis <fedora@leemhuis.info>2020-04-29 16:33:44 +0200
committerThorsten Leemhuis <fedora@leemhuis.info>2020-04-29 16:33:44 +0200
commit0c9c09e2873354ef28a3b5a74acd8884292e6fc4 (patch)
tree49fea2bb89fee2d6afa95b70753db38535e9f4eb /0001-btrfs-fix-memory-leak-of-transaction-when-deleting-u.patch
parentb882163f98fbb3dcc9ff5d494827ea4abbaf7a12 (diff)
parent68dd5fcadc5b702c7d1426dea990ff0b55e62f42 (diff)
downloadkernel-0c9c09e2873354ef28a3b5a74acd8884292e6fc4.tar.gz
kernel-0c9c09e2873354ef28a3b5a74acd8884292e6fc4.tar.xz
kernel-0c9c09e2873354ef28a3b5a74acd8884292e6fc4.zip
Merge remote-tracking branch 'origin/master' into rawhide-user-thl-vanilla-fedora
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.patch45
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
+