• Eric Dumazet's avatar
    ipv4: set transport header earlier · 21d1196a
    Eric Dumazet authored
    commit 45f00f99 ("ipv4: tcp: clean up tcp_v4_early_demux()") added a
    performance regression for non GRO traffic, basically disabling
    IP early demux.
    
    IPv6 stack resets transport header in ip6_rcv() before calling
    IP early demux in ip6_rcv_finish(), while IPv4 does this only in
    ip_local_deliver_finish(), _after_ IP early demux.
    
    GRO traffic happened to enable IP early demux because transport header
    is also set in inet_gro_receive()
    
    Instead of reverting the faulty commit, we can make IPv4/IPv6 behave the
    same : transport_header should be set in ip_rcv() instead of
    ip_local_deliver_finish()
    
    ip_local_deliver_finish() can also use skb_network_header_len() which is
    faster than ip_hdrlen()
    Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
    Cc: Neal Cardwell <ncardwell@google.com>
    Cc: Tom Herbert <therbert@google.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    21d1196a
ip_input.c 13 KB