On Fri, Jun 18, 2021 at 11:50:25AM -0700, Linus Torvalds wrote: > I think that you may need it to be based on Al's series for that to > work, which might be inconvenient, though. > > One other non-code issue: particularly since you only handle a subset > of the iov_iter cases, it would be nice to have an explanation for > _why_ those particular cases. > > IOW, have some trivial explanation for each of the cases. "iovec" is > for regular read/write, what triggers the kvec and bvec cases? > > But also, the other way around. Why doesn't the pipe case trigger? No > splice support? Pipe ones are strictly destinations - they can't be sources. So if you see it called for one of those, you've a bug. Xarray ones are *not* - they can be sources, and that's missing here. Much more unpleasant, though, is that this thing has hard dependency on nr_seg == 1 *AND* openly suggests the use of iov_iter_single_seg_count(), which is completely wrong. That sucker has some weird users left (as of #work.iov_iter), but all of them are actually due to API deficiencies and I very much hope to kill that thing off. Why not simply add iov_iter_check_zeroes(), that would be called after copy_from_iter() and verified that all that's left in the iterator consists of zeroes? Then this copy_struct_from_...() would be trivial to express through those two. And check_zeroes would also be trivial, especially on top of #work.iov_iter. With no calls of iov_iter_advance() at all, while we are at it... IDGI... Omar, what semantics do you really want from that primitive?