Commit 249bf593 authored by Kent Overstreet's avatar Kent Overstreet
Browse files

bcachefs: Fix snapshot.c assertion for online fsck



c->curr_recovery_pass can go backwards; this adds a non rewinding
version, c->recovery_pass_done.

Signed-off-by: default avatarKent Overstreet <kent.overstreet@linux.dev>
parent b56cee70
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -1057,7 +1057,10 @@ struct bch_fs {
	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 */
+3 −0
Original line number Diff line number Diff line
@@ -713,6 +713,7 @@ static int bch2_run_recovery_passes(struct bch_fs *c)
			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;
@@ -1197,6 +1198,8 @@ int bch2_fs_initialize(struct bch_fs *c)
		goto err;
	}

	c->recovery_pass_done = ARRAY_SIZE(recovery_pass_fns) - 1;

	if (enabled_qtypes(c)) {
		ret = bch2_fs_quota_read(c);
		if (ret)
+1 −1
Original line number Diff line number Diff line
@@ -123,7 +123,7 @@ bool __bch2_snapshot_is_ancestor(struct bch_fs *c, u32 id, u32 ancestor)
	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);