• Al Viro's avatar
    ITER_PIPE: helper for getting pipe buffer by index · 2dcedb2a
    Al Viro authored
    pipe_buffer instances of a pipe are organized as a ring buffer,
    with power-of-2 size.  Indices are kept *not* reduced modulo ring
    size, so the buffer refered to by index N is
    	pipe->bufs[N & (pipe->ring_size - 1)].
    
    Ring size can change over the lifetime of a pipe, but not while
    the pipe is locked.  So for any iov_iter primitives it's a constant.
    Original conversion of pipes to this layout went overboard trying
    to microoptimize that - calculating pipe->ring_size - 1, storing
    it in a local variable and using through the function.  In some
    cases it might be warranted, but most of the times it only
    obfuscates what's going on in there.
    
    Introduce a helper (pipe_buf(pipe, N)) that would encapsulate
    that and use it in the obvious cases.  More will follow...
    Reviewed-by: default avatarJeff Layton <jlayton@kernel.org>
    Reviewed-by: default avatarChristian Brauner (Microsoft) <brauner@kernel.org>
    Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
    2dcedb2a
iov_iter.c 49.2 KB