btrfs: unfold transaction abort at btrfs_insert_one_raid_extent()
authorFilipe Manana <fdmanana@suse.com>
Mon, 19 May 2025 11:16:10 +0000 (12:16 +0100)
committerDavid Sterba <dsterba@suse.com>
Mon, 21 Jul 2025 21:53:24 +0000 (23:53 +0200)
We have a common error path where we abort the transaction, but like this
in case we get a transaction abort stack trace we don't know exactly which
previous function call failed. Instead abort the transaction after any
function call that returns an error, so that we can easily identify which
function failed.

Reviewed-by: Daniel Vacek <neelx@suse.com>
Reviewed-by: Qu Wenruo <wqu@suse.com>
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/raid-stripe-tree.c

index 1834011ccc499a38c54336c6350d039116b0b318..cab0b291088c67f190accebecfd0a4e661332600 100644 (file)
@@ -329,11 +329,14 @@ int btrfs_insert_one_raid_extent(struct btrfs_trans_handle *trans,
 
        ret = btrfs_insert_item(trans, stripe_root, &stripe_key, stripe_extent,
                                item_size);
-       if (ret == -EEXIST)
+       if (ret == -EEXIST) {
                ret = update_raid_extent_item(trans, &stripe_key, stripe_extent,
                                              item_size);
-       if (ret)
+               if (ret)
+                       btrfs_abort_transaction(trans, ret);
+       } else if (ret) {
                btrfs_abort_transaction(trans, ret);
+       }
 
        kfree(stripe_extent);