diff options
author | Kent Overstreet <kent.overstreet@linux.dev> | 2025-05-26 11:12:53 -0400 |
---|---|---|
committer | Kent Overstreet <kent.overstreet@linux.dev> | 2025-05-27 00:03:45 -0400 |
commit | 72ab5136e86fcbccebb4a423d83332f41a7bd697 (patch) | |
tree | 35e9bd92ab9e2afaf376b9154326a5158ed57107 | |
parent | 686db67a8ebecdc6eb7b9ca8ef8eddb99bdf1083 (diff) |
bcachefs: Don't rewind to run a recovery pass we already ran
Fix a small regression from the "run recovery passes" rewrite, which
enabled async recovery passes.
This fixes getting stuck in a loop in recovery.
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
-rw-r--r-- | fs/bcachefs/recovery_passes.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/fs/bcachefs/recovery_passes.c b/fs/bcachefs/recovery_passes.c index dabb29b08ad0..212658cb97dd 100644 --- a/fs/bcachefs/recovery_passes.c +++ b/fs/bcachefs/recovery_passes.c @@ -315,7 +315,9 @@ int __bch2_run_explicit_recovery_pass(struct bch_fs *c, goto out; bool in_recovery = test_bit(BCH_FS_in_recovery, &c->flags); - bool rewind = in_recovery && r->curr_pass > pass; + bool rewind = in_recovery && + r->curr_pass > pass && + !(r->passes_complete & BIT_ULL(pass)); bool ratelimit = flags & RUN_RECOVERY_PASS_ratelimit; if (!(in_recovery && (flags & RUN_RECOVERY_PASS_nopersistent))) { |