mirror of
https://github.com/torvalds/linux.git
synced 2026-05-27 00:22:00 +02:00
bcachefs: Reduce usage of recovery.curr_pass
We want recovery.curr_pass to be private to the recovery passes code, for better showing recovery pass status; also, it may rewind and is generally not the correct member to use. Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
This commit is contained in:
parent
ab35552030
commit
7ed4c14e20
|
|
@ -309,7 +309,8 @@ int bch2_alloc_v4_validate(struct bch_fs *c, struct bkey_s_c k,
|
|||
"data type inconsistency");
|
||||
|
||||
bkey_fsck_err_on(!a.io_time[READ] &&
|
||||
c->recovery.curr_pass > BCH_RECOVERY_PASS_check_alloc_to_lru_refs,
|
||||
!(c->recovery.passes_to_run &
|
||||
BIT_ULL(BCH_RECOVERY_PASS_check_alloc_to_lru_refs)),
|
||||
c, alloc_key_cached_but_read_time_zero,
|
||||
"cached bucket with read_time == 0");
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -154,7 +154,7 @@ static struct open_bucket *bch2_open_bucket_alloc(struct bch_fs *c)
|
|||
|
||||
static inline bool is_superblock_bucket(struct bch_fs *c, struct bch_dev *ca, u64 b)
|
||||
{
|
||||
if (c->recovery.curr_pass > BCH_RECOVERY_PASS_trans_mark_dev_sbs)
|
||||
if (c->recovery.passes_complete & BIT_ULL(BCH_RECOVERY_PASS_trans_mark_dev_sbs))
|
||||
return false;
|
||||
|
||||
return bch2_is_superblock_bucket(ca, b);
|
||||
|
|
@ -524,7 +524,7 @@ static struct open_bucket *bch2_bucket_alloc_trans(struct btree_trans *trans,
|
|||
|
||||
if (!avail) {
|
||||
if (req->watermark > BCH_WATERMARK_normal &&
|
||||
c->recovery.curr_pass <= BCH_RECOVERY_PASS_check_allocations)
|
||||
c->recovery.pass_done < BCH_RECOVERY_PASS_check_allocations)
|
||||
goto alloc;
|
||||
|
||||
if (cl && !waiting) {
|
||||
|
|
@ -554,7 +554,7 @@ static struct open_bucket *bch2_bucket_alloc_trans(struct btree_trans *trans,
|
|||
goto alloc;
|
||||
}
|
||||
|
||||
if (!ob && freespace && c->recovery.curr_pass <= BCH_RECOVERY_PASS_check_alloc_info) {
|
||||
if (!ob && freespace && c->recovery.pass_done < BCH_RECOVERY_PASS_check_alloc_info) {
|
||||
freespace = false;
|
||||
goto alloc;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -104,6 +104,8 @@ static noinline int backpointer_mod_err(struct btree_trans *trans,
|
|||
{
|
||||
struct bch_fs *c = trans->c;
|
||||
struct printbuf buf = PRINTBUF;
|
||||
bool will_check = c->recovery.passes_to_run &
|
||||
BIT_ULL(BCH_RECOVERY_PASS_check_extents_to_backpointers);
|
||||
int ret = 0;
|
||||
|
||||
if (insert) {
|
||||
|
|
@ -120,7 +122,7 @@ static noinline int backpointer_mod_err(struct btree_trans *trans,
|
|||
bch2_bkey_val_to_text(&buf, c, orig_k);
|
||||
|
||||
bch_err(c, "%s", buf.buf);
|
||||
} else if (c->recovery.curr_pass > BCH_RECOVERY_PASS_check_extents_to_backpointers) {
|
||||
} else if (!will_check) {
|
||||
prt_printf(&buf, "backpointer not found when deleting\n");
|
||||
printbuf_indent_add(&buf, 2);
|
||||
|
||||
|
|
@ -136,8 +138,7 @@ static noinline int backpointer_mod_err(struct btree_trans *trans,
|
|||
bch2_bkey_val_to_text(&buf, c, orig_k);
|
||||
}
|
||||
|
||||
if (c->recovery.curr_pass > BCH_RECOVERY_PASS_check_extents_to_backpointers &&
|
||||
__bch2_inconsistent_error(c, &buf))
|
||||
if (!will_check && __bch2_inconsistent_error(c, &buf))
|
||||
ret = -BCH_ERR_erofs_unfixed_errors;
|
||||
|
||||
bch_err(c, "%s", buf.buf);
|
||||
|
|
|
|||
|
|
@ -1003,7 +1003,7 @@ static noinline void btree_bad_header(struct bch_fs *c, struct btree *b)
|
|||
{
|
||||
struct printbuf buf = PRINTBUF;
|
||||
|
||||
if (c->recovery.curr_pass <= BCH_RECOVERY_PASS_check_allocations)
|
||||
if (c->recovery.pass_done < BCH_RECOVERY_PASS_check_allocations)
|
||||
return;
|
||||
|
||||
prt_printf(&buf,
|
||||
|
|
|
|||
|
|
@ -1775,8 +1775,7 @@ void bch2_btree_node_read(struct btree_trans *trans, struct btree *b,
|
|||
prt_newline(&buf);
|
||||
bch2_btree_lost_data(c, &buf, b->c.btree_id);
|
||||
|
||||
if (c->opts.recovery_passes & BIT_ULL(BCH_RECOVERY_PASS_check_topology) &&
|
||||
c->recovery.curr_pass > BCH_RECOVERY_PASS_check_topology &&
|
||||
if (c->recovery.passes_complete & BIT_ULL(BCH_RECOVERY_PASS_check_topology) &&
|
||||
bch2_fs_emergency_read_only2(c, &buf))
|
||||
ratelimit = false;
|
||||
|
||||
|
|
|
|||
|
|
@ -2363,7 +2363,7 @@ void bch2_btree_node_rewrite_async(struct bch_fs *c, struct btree *b)
|
|||
bool now = false, pending = false;
|
||||
|
||||
spin_lock(&c->btree_node_rewrites_lock);
|
||||
if (c->recovery.curr_pass > BCH_RECOVERY_PASS_journal_replay &&
|
||||
if (c->recovery.passes_complete & BIT_ULL(BCH_RECOVERY_PASS_journal_replay) &&
|
||||
enumerated_ref_tryget(&c->writes, BCH_WRITE_REF_node_rewrite)) {
|
||||
list_add(&a->list, &c->btree_node_rewrites);
|
||||
now = true;
|
||||
|
|
|
|||
|
|
@ -3177,7 +3177,6 @@ static int bch2_fsck_online_thread_fn(struct thread_with_stdio *stdio)
|
|||
c->opts.fsck = true;
|
||||
set_bit(BCH_FS_in_fsck, &c->flags);
|
||||
|
||||
c->recovery.curr_pass = BCH_RECOVERY_PASS_check_alloc_info;
|
||||
int ret = bch2_run_online_recovery_passes(c, ~0ULL);
|
||||
|
||||
clear_bit(BCH_FS_in_fsck, &c->flags);
|
||||
|
|
|
|||
|
|
@ -348,7 +348,7 @@ static int __bch2_mark_snapshot(struct btree_trans *trans,
|
|||
|
||||
if (BCH_SNAPSHOT_WILL_DELETE(s.v)) {
|
||||
set_bit(BCH_FS_need_delete_dead_snapshots, &c->flags);
|
||||
if (c->recovery.curr_pass > BCH_RECOVERY_PASS_delete_dead_snapshots)
|
||||
if (c->recovery.pass_done > BCH_RECOVERY_PASS_delete_dead_snapshots)
|
||||
bch2_delete_dead_snapshots_async(c);
|
||||
}
|
||||
} else {
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user