]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
btrfs: abort transaction on failure to update root in the received subvol ioctl
authorFilipe Manana <fdmanana@suse.com>
Fri, 27 Feb 2026 00:02:33 +0000 (00:02 +0000)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 19 Mar 2026 15:15:29 +0000 (16:15 +0100)
commit 0f475ee0ebce5c9492b260027cd95270191675fa upstream.

If we failed to update the root we don't abort the transaction, which is
wrong since we already used the transaction to remove an item from the
uuid tree.

Fixes: dd5f9615fc5c ("Btrfs: maintain subvolume items in the UUID tree")
CC: stable@vger.kernel.org # 3.12+
Reviewed-by: Anand Jain <asj@kernel.org>
Signed-off-by: Filipe Manana <fdmanana@suse.com>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
fs/btrfs/ioctl.c

index 4541507654c0d421880717dd76bc0e30894e8819..1a5d98811f2b21cb842fba09c080daa860c4962a 100644 (file)
@@ -3987,7 +3987,8 @@ static long _btrfs_ioctl_set_received_subvol(struct file *file,
 
        ret = btrfs_update_root(trans, fs_info->tree_root,
                                &root->root_key, &root->root_item);
-       if (ret < 0) {
+       if (unlikely(ret < 0)) {
+               btrfs_abort_transaction(trans, ret);
                btrfs_end_transaction(trans);
                goto out;
        }