mirror of
https://github.com/torvalds/linux.git
synced 2026-05-30 01:53:29 +02:00
bcachefs: btree read retry fixes
Fix btree node read retries after validate errors: __btree_err() is the wrong place to flag a topology error: that is done by btree_lost_data(). Additionally, some calls to bch2_bkey_pick_read_device() were not updated in the 6.16 rework for improved log messages; we were failing to signal that we still had a retry. Cc: Nikita Ofitserov <himikof@gmail.com> Cc: Alan Huang <mmpgouride@gmail.com> Reported-and-tested-by: Edoardo Codeglia <bcachefs@404.blue> Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
This commit is contained in:
parent
a77ffbe34d
commit
14dd95647e
|
|
@ -568,9 +568,9 @@ static int __btree_err(int ret,
|
|||
bch2_mark_btree_validate_failure(failed, ca->dev_idx);
|
||||
|
||||
struct extent_ptr_decoded pick;
|
||||
have_retry = !bch2_bkey_pick_read_device(c,
|
||||
have_retry = bch2_bkey_pick_read_device(c,
|
||||
bkey_i_to_s_c(&b->key),
|
||||
failed, &pick, -1);
|
||||
failed, &pick, -1) == 1;
|
||||
}
|
||||
|
||||
if (!have_retry && ret == -BCH_ERR_btree_node_read_err_want_retry)
|
||||
|
|
@ -615,7 +615,6 @@ static int __btree_err(int ret,
|
|||
goto out;
|
||||
case -BCH_ERR_btree_node_read_err_bad_node:
|
||||
prt_str(&out, ", ");
|
||||
ret = __bch2_topology_error(c, &out);
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
@ -644,7 +643,6 @@ static int __btree_err(int ret,
|
|||
goto out;
|
||||
case -BCH_ERR_btree_node_read_err_bad_node:
|
||||
prt_str(&out, ", ");
|
||||
ret = __bch2_topology_error(c, &out);
|
||||
break;
|
||||
}
|
||||
print:
|
||||
|
|
@ -1408,7 +1406,7 @@ static void btree_node_read_work(struct work_struct *work)
|
|||
ret = bch2_bkey_pick_read_device(c,
|
||||
bkey_i_to_s_c(&b->key),
|
||||
&failed, &rb->pick, -1);
|
||||
if (ret) {
|
||||
if (ret <= 0) {
|
||||
set_btree_node_read_error(b);
|
||||
break;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -282,7 +282,6 @@
|
|||
x(EIO, sb_not_downgraded) \
|
||||
x(EIO, btree_node_write_all_failed) \
|
||||
x(EIO, btree_node_read_error) \
|
||||
x(EIO, btree_node_read_validate_error) \
|
||||
x(EIO, btree_need_topology_repair) \
|
||||
x(EIO, bucket_ref_update) \
|
||||
x(EIO, trigger_alloc) \
|
||||
|
|
|
|||
|
|
@ -103,7 +103,7 @@ int __bch2_topology_error(struct bch_fs *c, struct printbuf *out)
|
|||
return bch_err_throw(c, btree_need_topology_repair);
|
||||
} else {
|
||||
return bch2_run_explicit_recovery_pass(c, out, BCH_RECOVERY_PASS_check_topology, 0) ?:
|
||||
bch_err_throw(c, btree_node_read_validate_error);
|
||||
bch_err_throw(c, btree_need_topology_repair);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user