From: Eric Dumazet <eduma...@google.com> Date: Mon, 19 Nov 2018 17:45:55 -0800
> Under stress, softirq rx handler often hits a socket owned by the user, > and has to queue the packet into socket backlog. > > When this happens, skb dst refcount is taken before we escape rcu > protected region. This is done from __sk_add_backlog() calling > skb_dst_force(). > > Consumer will have to perform the opposite costly operation. > > AFAIK nothing in tcp stack requests the dst after skb was stored > in the backlog. If this was the case, we would have had failures > already since skb_dst_force() can end up clearing skb dst anyway. > > Signed-off-by: Eric Dumazet <eduma...@google.com> Hmmm, it seems to be used by connection completion code to setup the socket cached rx dst, right? For example tcp_finish_connect() --> icsk->icsk_af_ops->sk_rx_dst_set(sk, skb)