In case of failure halfway through the operation we get
very different results depending upon the iov_iter flavour:
iovec, pipe - advances by the amount actually copied,
kvec, bvec - does *NOT* advance at all
Which semantics is desired? AFAICS, the calls can be repeated -
e.g. the loop in dax_iomap_actor() will call dax_copy_to_iter()
again on the short read and with iovec-backed iter it will
try to copy from the place of failure (presumably returning 0
that time around and terminating the loop), while with bvec
or kvec it will go and paste the copies of the same chunk again
until it runs out of destination.
Show replies by thread