• A
    new iov_iter flavour: pipe-backed · 241699cd
    Al Viro 提交于
    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: NAl Viro <viro@zeniv.linux.org.uk>
    241699cd
iov_iter.c 27.6 KB