tcp: increment sk_drops for listeners
Goal: packets dropped by a listener are accounted for. This adds tcp_listendrop() helper, and clears sk_drops in sk_clone_lock() so that children do not inherit their parent drop count. Note that we no longer increment LINUX_MIB_LISTENDROPS counter when sending a SYNCOOKIE, since the SYN packet generated a SYNACK. We already have a separate LINUX_MIB_SYNCOOKIESSENT Signed-off-by: Eric Dumazet <edumazet@google.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
532182cd61
commit
9caad86415
@@ -1836,4 +1836,17 @@ static inline void tcp_segs_in(struct tcp_sock *tp, const struct sk_buff *skb)
|
||||
tp->data_segs_in += segs_in;
|
||||
}
|
||||
|
||||
/*
|
||||
* TCP listen path runs lockless.
|
||||
* We forced "struct sock" to be const qualified to make sure
|
||||
* we don't modify one of its field by mistake.
|
||||
* Here, we increment sk_drops which is an atomic_t, so we can safely
|
||||
* make sock writable again.
|
||||
*/
|
||||
static inline void tcp_listendrop(const struct sock *sk)
|
||||
{
|
||||
atomic_inc(&((struct sock *)sk)->sk_drops);
|
||||
NET_INC_STATS_BH(sock_net(sk), LINUX_MIB_LISTENDROPS);
|
||||
}
|
||||
|
||||
#endif /* _TCP_H */
|
||||
|
Reference in New Issue
Block a user