• Al Viro's avatar
    ITER_PIPE: allocate buffers as we go in copy-to-pipe primitives · 8fad7767
    Al Viro authored
    New helper: append_pipe().  Extends the last buffer if possible,
    allocates a new one otherwise.  Returns page and offset in it
    on success, NULL on failure.  iov_iter is advanced past the
    data we've got.
    
    Use that instead of push_pipe() in copy-to-pipe primitives;
    they get simpler that way.  Handling of short copy (in "mc" one)
    is done simply by iov_iter_revert() - iov_iter is in consistent
    state after that one, so we can use that.
    
    [Fix for braino caught by Liu Xinpeng <liuxp11@chinatelecom.cn> folded in]
    [another braino fix, this time in copy_pipe_to_iter() and pipe_zero();
    caught by testcase from Hugh Dickins]
    Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
    8fad7767
iov_iter.c 49.5 KB