bad_lo = pos; bad_hi = pos + 1;
for (;;) {
report_bad_blocks_progress(bad_lo, bad_hi, errno);
+#ifdef DEBUG
+ debug_clear_progress();
+ printf(";; bounding bad-block region: "
+ "%"PRIuSEC" ..%"PRIuSEC".. %"PRIuSEC"\n",
+ bad_lo, bad_hi - bad_lo, bad_hi);
+#endif
if (bad_hi >= end) {
clear_progress();
moan("giving up on this extent");
want = run_length_wanted(pos, step, sz, end);
n = recovery_read(&r, pos, want);
#ifdef DEBUG
- debug_clear_progress();
printf(";; [bound] try reading %"PRIuSEC" .. %"PRIuSEC" -> %zd\n",
pos, pos + want, n);
#endif
good = pos;
while (good > bad_hi) {
report_bad_blocks_progress(bad_lo, bad_hi, errno);
+#ifdef DEBUG
+ debug_clear_progress();
+ printf(";; limiting bad-block region: "
+ "%"PRIuSEC" ..%"PRIuSEC".. %"PRIuSEC" ..%"PRIuSEC".. %"PRIuSEC"\n",
+ bad_lo, bad_hi - bad_lo, bad_hi, good - bad_hi, good);
+#endif
pos = bad_hi + (good - bad_hi)/2;
step = pos - bad_lo;
want = run_length_wanted(pos, step, sz, end);
n = recovery_read(&r, pos, want);
#ifdef DEBUG
- debug_clear_progress();
printf(";; [limit] try reading %"PRIuSEC" .. %"PRIuSEC" -> %zd\n",
pos, pos + want, n);
#endif