• Eric Dumazet's avatar
    tcp: add a force_schedule argument to sk_stream_alloc_skb() · eb934478
    Eric Dumazet authored
    In commit 8e4d980a ("tcp: fix behavior for epoll edge trigger")
    we fixed a possible hang of TCP sockets under memory pressure,
    by allowing sk_stream_alloc_skb() to use sk_forced_mem_schedule()
    if no packet is in socket write queue.
    
    It turns out there are other cases where we want to force memory
    schedule :
    
    tcp_fragment() & tso_fragment() need to split a big TSO packet into
    two smaller ones. If we block here because of TCP memory pressure,
    we can effectively block TCP socket from sending new data.
    If no further ACK is coming, this hang would be definitive, and socket
    has no chance to effectively reduce its memory usage.
    Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    eb934478
tcp_output.c 101 KB