Bisect: halve at dead boundary + exempt boundary probes from stall
The expand loops broke out of the batch sweep on the first failing read, overshooting the good/dead boundary by up to a batch and leaving the readable sectors adjacent to a dead edge for the re-bisect to re-pin. On top of that, early-yield counted those boundary-probe failures as a stall, so the forward expand quit early AND the backward expand inherited a poisoned unproductive counter and yielded instantly. Now on a failed expand batch we halve the step (down to a single sector) to recover right up to the dead edge in ~log2(batch) reads, drive the expand loops off the deadline only (they self-terminate via halving), and clear the unproductive streak once an island is located. patch_recovers_ good_middle_of_a_bad_range now recovers 50/50 good-middle sectors.
This commit is contained in:
@@ -912,6 +912,7 @@ impl PatchCtx<'_, '_> {
|
||||
halt: self.opts.halt.as_deref(),
|
||||
decrypt_is_aacs: self.decrypt_is_aacs,
|
||||
tick: Some(&mut tick),
|
||||
unproductive: 0,
|
||||
};
|
||||
run_handlers(&mut ctx, &mut handlers, bad, &mut self.scoreboard, |_bad| {
|
||||
now_ptr() + std::time::Duration::from_secs(PER_HANDLER_BUDGET_SECS)
|
||||
|
||||
Reference in New Issue
Block a user