]> git.baikalelectronics.ru Git - kernel.git/commit
new iov_iter flavour: pipe-backed
authorAl Viro <viro@zeniv.linux.org.uk>
Thu, 22 Sep 2016 20:33:12 +0000 (16:33 -0400)
committerAl Viro <viro@zeniv.linux.org.uk>
Wed, 5 Oct 2016 22:23:36 +0000 (18:23 -0400)
commit96607715cf28f4509174509963688a4a9cc78e1d
treeefcd8d62f5788ab843cd3457cf2e85f3be7b5296
parent0da0563d8611b6088d7e8ce39ac92f2ba72d0c3d
new iov_iter flavour: pipe-backed

iov_iter variant for passing data into pipe.  copy_to_iter()
copies data into page(s) it has allocated and stuffs them into
the pipe; copy_page_to_iter() stuffs there a reference to the
page given to it.  Both will try to coalesce if possible.
iov_iter_zero() is similar to copy_to_iter(); iov_iter_get_pages()
and friends will do as copy_to_iter() would have and return the
pages where the data would've been copied.  iov_iter_advance()
will truncate everything past the spot it has advanced to.

New primitive: iov_iter_pipe(), used for initializing those.
pipe should be locked all along.

Running out of space acts as fault would for iovec-backed ones;
in other words, giving it to ->read_iter() may result in short
read if the pipe overflows, or -EFAULT if it happens with nothing
copied there.

In other words, ->read_iter() on those acts pretty much like
->splice_read().  Moreover, all generic_file_splice_read() users,
as well as many other ->splice_read() instances can be switched
to that scheme - that'll happen in the next commit.

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
fs/splice.c
include/linux/splice.h
include/linux/uio.h
lib/iov_iter.c