• Eric Dumazet's avatar
    af_unix: improve STREAM behavior with fragmented memory · e370a723
    Eric Dumazet authored
    unix_stream_sendmsg() currently uses order-2 allocations,
    and we had numerous reports this can fail.
    
    The __GFP_REPEAT flag present in sock_alloc_send_pskb() is
    not helping.
    
    This patch extends the work done in commit eb6a2481
    ("af_unix: reduce high order page allocations) for
    datagram sockets.
    
    This opens the possibility of zero copy IO (splice() and
    friends)
    
    The trick is to not use skb_pull() anymore in recvmsg() path,
    and instead add a @consumed field in UNIXCB() to track amount
    of already read payload in the skb.
    
    There is a performance regression for large sends
    because of extra page allocations that will be addressed
    in a follow-up patch, allowing sock_alloc_send_pskb()
    to attempt high order page allocations.
    Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
    Cc: David Rientjes <rientjes@google.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    e370a723
af_unix.c 56.5 KB