]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
4.14-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 16 Sep 2023 12:29:24 +0000 (14:29 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 16 Sep 2023 12:29:24 +0000 (14:29 +0200)
added patches:
btrfs-don-t-start-transaction-when-joining-with-trans_join_nostart.patch

queue-4.14/btrfs-don-t-start-transaction-when-joining-with-trans_join_nostart.patch [new file with mode: 0644]
queue-4.14/series

diff --git a/queue-4.14/btrfs-don-t-start-transaction-when-joining-with-trans_join_nostart.patch b/queue-4.14/btrfs-don-t-start-transaction-when-joining-with-trans_join_nostart.patch
new file mode 100644 (file)
index 0000000..d07f748
--- /dev/null
@@ -0,0 +1,43 @@
+From 4490e803e1fe9fab8db5025e44e23b55df54078b Mon Sep 17 00:00:00 2001
+From: Filipe Manana <fdmanana@suse.com>
+Date: Wed, 26 Jul 2023 16:56:57 +0100
+Subject: btrfs: don't start transaction when joining with TRANS_JOIN_NOSTART
+
+From: Filipe Manana <fdmanana@suse.com>
+
+commit 4490e803e1fe9fab8db5025e44e23b55df54078b upstream.
+
+When joining a transaction with TRANS_JOIN_NOSTART, if we don't find a
+running transaction we end up creating one. This goes against the purpose
+of TRANS_JOIN_NOSTART which is to join a running transaction if its state
+is at or below the state TRANS_STATE_COMMIT_START, otherwise return an
+-ENOENT error and don't start a new transaction. So fix this to not create
+a new transaction if there's no running transaction at or below that
+state.
+
+CC: stable@vger.kernel.org # 4.14+
+Fixes: a6d155d2e363 ("Btrfs: fix deadlock between fiemap and transaction commits")
+Signed-off-by: Filipe Manana <fdmanana@suse.com>
+Signed-off-by: David Sterba <dsterba@suse.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ fs/btrfs/transaction.c |    7 ++++---
+ 1 file changed, 4 insertions(+), 3 deletions(-)
+
+--- a/fs/btrfs/transaction.c
++++ b/fs/btrfs/transaction.c
+@@ -216,10 +216,11 @@ loop:
+       spin_unlock(&fs_info->trans_lock);
+       /*
+-       * If we are ATTACH, we just want to catch the current transaction,
+-       * and commit it. If there is no transaction, just return ENOENT.
++       * If we are ATTACH or TRANS_JOIN_NOSTART, we just want to catch the
++       * current transaction, and commit it. If there is no transaction, just
++       * return ENOENT.
+        */
+-      if (type == TRANS_ATTACH)
++      if (type == TRANS_ATTACH || type == TRANS_JOIN_NOSTART)
+               return -ENOENT;
+       /*
index 7f48c6d65895fc7841b3b8a24c3c05e55ffb69f4..297e7e6de4ab437eba816826e1d8afc062eebb35 100644 (file)
@@ -141,3 +141,4 @@ igbvf-change-igbvf_min-to-allow-set-rx-tx-value-betw.patch
 igb-change-igb_min-to-allow-set-rx-tx-value-between-.patch
 ata-sata_gemini-add-missing-module_description.patch
 ata-pata_ftide010-add-missing-module_description.patch
+btrfs-don-t-start-transaction-when-joining-with-trans_join_nostart.patch