• David Howells's avatar
    splice, net: Use sendmsg(MSG_SPLICE_PAGES) rather than ->sendpage() · 2dc334f1
    David Howells authored
    Replace generic_splice_sendpage() + splice_from_pipe + pipe_to_sendpage()
    with a net-specific handler, splice_to_socket(), that calls sendmsg() with
    MSG_SPLICE_PAGES set instead of calling ->sendpage().
    
    MSG_MORE is used to indicate if the sendmsg() is expected to be followed
    with more data.
    
    This allows multiple pipe-buffer pages to be passed in a single call in a
    BVEC iterator, allowing the processing to be pushed down to a loop in the
    protocol driver.  This helps pave the way for passing multipage folios down
    too.
    
    Protocols that haven't been converted to handle MSG_SPLICE_PAGES yet should
    just ignore it and do a normal sendmsg() for now - although that may be a
    bit slower as it may copy everything.
    Signed-off-by: default avatarDavid Howells <dhowells@redhat.com>
    Reviewed-by: default avatarJakub Kicinski <kuba@kernel.org>
    cc: Jens Axboe <axboe@kernel.dk>
    cc: Matthew Wilcox <willy@infradead.org>
    Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
    2dc334f1
splice.c 43 KB