On 15/12/2020 12:03, Ming Lei wrote: > On Tue, Dec 15, 2020 at 11:14:20AM +0000, Pavel Begunkov wrote: >> On 15/12/2020 01:41, Ming Lei wrote: >>> On Tue, Dec 15, 2020 at 12:20:19AM +0000, Pavel Begunkov wrote: >>>> Instead of creating a full copy of iter->bvec into bio in direct I/O, >>>> the patchset makes use of the one provided. It changes semantics and >>>> obliges users of asynchronous kiocb to track bvec lifetime, and [1/6] >>>> converts the only place that doesn't. >>> >>> Just think of one corner case: iov_iter(BVEC) may pass bvec table with zero >>> length bvec, which may not be supported by block layer or driver, so >>> this patchset has to address this case first. >> >> The easiest for me would be to fallback to copy if there are zero bvecs, >> e.g. finding such during iov_iter_alignment(), but do we know from where >> zero bvecs can came? As it's internals we may want to forbid them if >> there is not too much hassle. > > You may find clue from the following link: > > https://www.mail-archive.com/linux-kernel@xxxxxxxxxxxxxxx/msg2262077.html Thanks for the link! Al, you mentioned "Zero-length segments are not disallowed", do you have a strong opinion on that? Apart from already diverged behaviour from the block layer and getting in the way of this series, without it we'd also be able to remove some extra ifs, e.g. in iterate_bvec() -- Pavel Begunkov