On Mon, Nov 25, 2019 at 12:18:57PM +0100, Jan Kara wrote: > iomap_dio_bio_actor() copies iter to a local variable and then limits it > to a file extent we have mapped. When IO is submitted, > iomap_dio_bio_actor() advances the original iter while the copied iter > is advanced inside bio_iov_iter_get_pages(). This logic is non-obvious > especially because both iters still point to same shared structures > (such as pipe info) so if iov_iter_advance() changes anything in the > shared structure, this scheme breaks. Let's just truncate and reexpand > the original iter as needed instead of playing games with copying iters > and keeping them in sync. Looks good. Just one minor nit below which is eating me. I guess Darrick can fix it up when applying it to his tree, if deemed necessary to fix up. Feel free to add: Reviewed-by: Matthew Bobrowski <mbobrowski@xxxxxxxxxxxxxx> > /* > - * Operate on a partial iter trimmed to the extent we were called for. > - * We'll update the iter in the dio once we're done with this extent. > + * Save the original count and trim the iter to just the extent we > + * are operating on right now. The iter will be re-expanded once ^^ Extra whitespace here. IMO, I think we can word the last sentence a little better too i.e. /* * Save the original count and trim the iter to the extent that we're * currently operating on right now. The iter will then again be * expanded out once we're done. */ /M