On Tue, Oct 19, 2021 at 10:24:23PM +0100, Pavel Begunkov wrote: > Nobody cares about iov iterators state if we return -EIOCBQUEUED, so as > the we now have __blkdev_direct_IO_async(), which gets pages only once, > we can skip expensive iov_iter_advance(). It's around 1-2% of all CPU > spent. This is a pretty horrible code structure. If you do want to optimize this case just call __bio_iov_bvec_set directly from your fast path for the iov_iter_is_bvec case. And please add a big fat comment explaining it and document in the commit why this matters using actual numbers on a real workload.