Skip to content

Commit 14dd956

Browse files
author
Kent Overstreet
committed
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 <[email protected]> Cc: Alan Huang <[email protected]> Reported-and-tested-by: Edoardo Codeglia <[email protected]> Signed-off-by: Kent Overstreet <[email protected]>
1 parent a77ffbe commit 14dd956

File tree

3 files changed

+4
-7
lines changed

3 files changed

+4
-7
lines changed

fs/bcachefs/btree_io.c

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -568,9 +568,9 @@ static int __btree_err(int ret,
568568
bch2_mark_btree_validate_failure(failed, ca->dev_idx);
569569

570570
struct extent_ptr_decoded pick;
571-
have_retry = !bch2_bkey_pick_read_device(c,
571+
have_retry = bch2_bkey_pick_read_device(c,
572572
bkey_i_to_s_c(&b->key),
573-
failed, &pick, -1);
573+
failed, &pick, -1) == 1;
574574
}
575575

576576
if (!have_retry && ret == -BCH_ERR_btree_node_read_err_want_retry)
@@ -615,7 +615,6 @@ static int __btree_err(int ret,
615615
goto out;
616616
case -BCH_ERR_btree_node_read_err_bad_node:
617617
prt_str(&out, ", ");
618-
ret = __bch2_topology_error(c, &out);
619618
break;
620619
}
621620

@@ -644,7 +643,6 @@ static int __btree_err(int ret,
644643
goto out;
645644
case -BCH_ERR_btree_node_read_err_bad_node:
646645
prt_str(&out, ", ");
647-
ret = __bch2_topology_error(c, &out);
648646
break;
649647
}
650648
print:
@@ -1408,7 +1406,7 @@ static void btree_node_read_work(struct work_struct *work)
14081406
ret = bch2_bkey_pick_read_device(c,
14091407
bkey_i_to_s_c(&b->key),
14101408
&failed, &rb->pick, -1);
1411-
if (ret) {
1409+
if (ret <= 0) {
14121410
set_btree_node_read_error(b);
14131411
break;
14141412
}

fs/bcachefs/errcode.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -282,7 +282,6 @@
282282
x(EIO, sb_not_downgraded) \
283283
x(EIO, btree_node_write_all_failed) \
284284
x(EIO, btree_node_read_error) \
285-
x(EIO, btree_node_read_validate_error) \
286285
x(EIO, btree_need_topology_repair) \
287286
x(EIO, bucket_ref_update) \
288287
x(EIO, trigger_alloc) \

fs/bcachefs/error.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ int __bch2_topology_error(struct bch_fs *c, struct printbuf *out)
103103
return bch_err_throw(c, btree_need_topology_repair);
104104
} else {
105105
return bch2_run_explicit_recovery_pass(c, out, BCH_RECOVERY_PASS_check_topology, 0) ?:
106-
bch_err_throw(c, btree_node_read_validate_error);
106+
bch_err_throw(c, btree_need_topology_repair);
107107
}
108108
}
109109

0 commit comments

Comments
 (0)