]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
btrfs: unfold transaction aborts when replaying log trees
authorFilipe Manana <fdmanana@suse.com>
Wed, 21 May 2025 16:30:56 +0000 (17:30 +0100)
committerDavid Sterba <dsterba@suse.com>
Mon, 21 Jul 2025 21:44:11 +0000 (23:44 +0200)
We have a single line doing a transaction abort in case either we got an
error from btrfs_get_fs_root() different from -ENOENT or we got an error
from btrfs_pin_extent_for_log_replay(), making it hard to figure out which
function call failed when looking at a transaction abort massages and
stack trace in dmesg. Change this to have an explicit transaction abort
for each one of the two cases.

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/tree-log.c

index cea8a7e9d6d3b1162611db557b72b67c06b6b4e6..fea978ffadf659a1adc1dd200fc35d41146eb460 100644 (file)
@@ -7255,6 +7255,11 @@ again:
                                                   true);
                if (IS_ERR(wc.replay_dest)) {
                        ret = PTR_ERR(wc.replay_dest);
+                       if (ret != -ENOENT) {
+                               btrfs_put_root(log);
+                               btrfs_abort_transaction(trans, ret);
+                               goto error;
+                       }
 
                        /*
                         * We didn't find the subvol, likely because it was
@@ -7267,8 +7272,7 @@ again:
                         * block from being modified, and we'll just bail for
                         * each subsequent pass.
                         */
-                       if (ret == -ENOENT)
-                               ret = btrfs_pin_extent_for_log_replay(trans, log->node);
+                       ret = btrfs_pin_extent_for_log_replay(trans, log->node);
                        btrfs_put_root(log);
 
                        if (!ret)