On 25/09/20 23:22, Ben Gardon wrote: > + bool done; > + > + done = try_step_down(iter); > + if (done) > + return; > + > + done = try_step_side(iter); > + while (!done) { > + if (!try_step_up(iter)) { > + iter->valid = false; > + break; > + } > + done = try_step_side(iter); Seems easier to read without the "done" boolean: if (try_step_down(iter)) return; do { /* Maybe try_step_right? :) */ if (try_step_side(iter)) return; } while (try_step_up(iter)); iter->valid = false; Also it may be worth adding an "end_level" argument to the constructor, and checking against it in try_step_down instead of using PG_LEVEL_4K. By passing in PG_LEVEL_2M, you can avoid adding tdp_iter_next_no_step_down in patch 17 and generally simplify the logic there. Paolo