From 7e3bfd146e3ed1e3125a1c5e53c12dee787b6b4b Mon Sep 17 00:00:00 2001 From: Filipe Manana Date: Wed, 26 Jul 2023 16:57:06 +0100 Subject: [PATCH] btrfs: fail priority metadata ticket with real fs error At priority_reclaim_metadata_space(), if we were not able to satisfy the the ticket after going through the various flushing states and we notice the fs went into an error state, likely due to a transaction abort during the flushing, set the ticket's error to the error that caused the transaction abort instead of an unconditional -EROFS. Signed-off-by: Filipe Manana Signed-off-by: David Sterba --- fs/btrfs/space-info.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/fs/btrfs/space-info.c b/fs/btrfs/space-info.c index 5b1b71e029ad..be5ce209b918 100644 --- a/fs/btrfs/space-info.c +++ b/fs/btrfs/space-info.c @@ -1421,13 +1421,13 @@ static void priority_reclaim_metadata_space(struct btrfs_fs_info *fs_info, /* * Attempt to steal from the global rsv if we can, except if the fs was * turned into error mode due to a transaction abort when flushing space - * above, in that case fail with -EROFS instead of returning success to - * the caller if we can steal from the global rsv - this is just to have - * caller fail immeditelly instead of later when trying to modify the - * fs, making it easier to debug -ENOSPC problems. + * above, in that case fail with the abort error instead of returning + * success to the caller if we can steal from the global rsv - this is + * just to have caller fail immeditelly instead of later when trying to + * modify the fs, making it easier to debug -ENOSPC problems. */ if (BTRFS_FS_ERROR(fs_info)) { - ticket->error = -EROFS; + ticket->error = BTRFS_FS_ERROR(fs_info); remove_ticket(space_info, ticket); } else if (!steal_from_global_rsv(fs_info, space_info, ticket)) { ticket->error = -ENOSPC; -- 2.11.0