On 6/18/22 9:32 AM, Al Viro wrote: > On Sat, Jun 18, 2022 at 04:19:24PM +0100, Al Viro wrote: >> On Sat, Jun 18, 2022 at 08:08:08AM -0600, Jens Axboe wrote: >>> Using an ITER_UBUF is more efficient than an ITER_IOV, and for the single >>> segment case, there's no reason to use an ITER_IOV when an ITER_UBUF will >>> do. Experimental data collected shows that ~2/3rds of iovec imports are >>> single segments, from applications using readv/writev or recvmsg/sendmsg >>> that are iovec based. >>> >>> Explicitly check for nr_segs == 1 and import those as ubuf rather than >>> iovec based iterators. >> >> Hadn't we'd been through that before? There is infinibarf code that >> assumes ITER_IOVEC for what its ->write_iter() gets (and yes, that's >> the one that has ->write() with different semantics). >> >> And I wouldn't bet a dime on all ->sendmsg() and ->recvmsg() being >> flavour-agnostic either... > > Incidentally, what will your patch do to one-segment readv(2) from > e.g. /proc/self/status? Or anything else that has no ->read_iter, for > that matter... Yes indeed, that won't work at all... I guess this has to be up to the caller, we can't stuff it this far down. -- Jens Axboe