OSDN Git Service

btrfs: don't start transaction when joining with TRANS_JOIN_NOSTART
authorFilipe Manana <fdmanana@suse.com>
Wed, 26 Jul 2023 15:56:57 +0000 (16:56 +0100)
committerDavid Sterba <dsterba@suse.com>
Mon, 21 Aug 2023 12:52:17 +0000 (14:52 +0200)
commit4490e803e1fe9fab8db5025e44e23b55df54078b
tree6d2cfc7c558c3f531ca37dd5a36c886ab7dfe5e4
parent096d230165439a341639e85a5507c6b74c7dd410
btrfs: don't start transaction when joining with TRANS_JOIN_NOSTART

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>
fs/btrfs/transaction.c