• Eric Dumazet's avatar
    netlink: do not enter direct reclaim from netlink_dump() · d35c99ff
    Eric Dumazet authored
    Since linux-3.15, netlink_dump() can use up to 16384 bytes skb
    allocations.
    
    Due to struct skb_shared_info ~320 bytes overhead, we end up using
    order-3 (on x86) page allocations, that might trigger direct reclaim and
    add stress.
    
    The intent was really to attempt a large allocation but immediately
    fallback to a smaller one (order-1 on x86) in case of memory stress.
    
    On recent kernels (linux-4.4), we can remove __GFP_DIRECT_RECLAIM to
    meet the goal. Old kernels would need to remove __GFP_WAIT
    
    While we are at it, since we do an order-3 allocation, allow to use
    all the allocated bytes instead of 16384 to reduce syscalls during
    large dumps.
    
    iproute2 already uses 32KB recvmsg() buffer sizes.
    
    Alexei provided an initial patch downsizing to SKB_WITH_OVERHEAD(16384)
    
    Fixes: 9063e21f ("netlink: autosize skb lengthes")
    Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
    Reported-by: default avatarAlexei Starovoitov <ast@kernel.org>
    Cc: Greg Thelen <gthelen@google.com>
    Reviewed-by: default avatarGreg Rose <grose@lightfleet.com>
    Acked-by: default avatarAlexei Starovoitov <ast@kernel.org>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    d35c99ff
af_netlink.c 60.6 KB