On Fri, Nov 08, 2024 at 07:42:44AM -0500, Brian Foster wrote: > In preparation for special handling of subranges, lift the zeroed > mapping logic from the iterator into the caller. What's that special code? I don't really see anything added to this in the new code? In general I would prefer if all code for the iteration would be kept in a single function in preparation for unrolling these loops. If you want to keep this code separate from the write zeroes logic (which seems like a good idea) please just just move the actual real zeroing out of iomap_zero_iter into a separate helper similar to how we e.g. have multiple different implementations in the dio iterator. > + while ((ret = iomap_iter(&iter, ops)) > 0) { > + const struct iomap *s = iomap_iter_srcmap(&iter); > + > + if (s->type == IOMAP_HOLE || s->type == IOMAP_UNWRITTEN) { > + loff_t p = iomap_length(&iter); Also please stick to variable names that are readable and preferably the same as in the surrounding code, e.g. s -> srcmap p -> pos.