c->curr_recovery_pass can go backwards; this adds a non rewinding
version, c->recovery_pass_done.
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
        enum bch_recovery_pass  curr_recovery_pass;
        /* bitmap of explicitly enabled recovery passes: */
        u64                     recovery_passes_explicit;
+       /* bitmask of recovery passes that we actually ran */
        u64                     recovery_passes_complete;
+       /* never rewinds version of curr_recovery_pass */
+       enum bch_recovery_pass  recovery_pass_done;
        struct semaphore        online_fsck_mutex;
 
        /* DEBUG JUNK */
 
                        c->recovery_passes_complete |= BIT_ULL(c->curr_recovery_pass);
                }
                c->curr_recovery_pass++;
+               c->recovery_pass_done = max(c->recovery_pass_done, c->curr_recovery_pass);
        }
 
        return ret;
                goto err;
        }
 
+       c->recovery_pass_done = ARRAY_SIZE(recovery_pass_fns) - 1;
+
        if (enabled_qtypes(c)) {
                ret = bch2_fs_quota_read(c);
                if (ret)
 
        struct snapshot_table *t;
        bool ret;
 
-       EBUG_ON(c->curr_recovery_pass <= BCH_RECOVERY_PASS_check_snapshots);
+       EBUG_ON(c->recovery_pass_done <= BCH_RECOVERY_PASS_check_snapshots);
 
        rcu_read_lock();
        t = rcu_dereference(c->snapshots);