From 1662fdd8c26cdce65560cf2d1113349345472ade Mon Sep 17 00:00:00 2001 From: Eric Dumazet Date: Tue, 22 Jan 2008 06:18:34 -0800 Subject: [PATCH] --- yaml --- r: 79483 b: refs/heads/master c: 69a73829dbb10e7c8554e66a80cb4fde57347fff h: refs/heads/master i: 79481: c167adaf254dd3573161a1fed60edcecf425c978 79479: 4df98502a14968a5168e71b8917d168245a73cf5 v: v3 --- [refs] | 2 +- trunk/include/net/dst.h | 10 +++++----- trunk/net/ipv4/icmp.c | 13 +++++++------ 3 files changed, 13 insertions(+), 12 deletions(-) diff --git a/[refs] b/[refs] index d8a17cb7437b..2da0b8a4b37a 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 81566e8322c3f6c6f9a2277fe0e440fee8d917bd +refs/heads/master: 69a73829dbb10e7c8554e66a80cb4fde57347fff diff --git a/trunk/include/net/dst.h b/trunk/include/net/dst.h index c45dcc31b3bb..e3ac7d0fc4e1 100644 --- a/trunk/include/net/dst.h +++ b/trunk/include/net/dst.h @@ -56,7 +56,11 @@ struct dst_entry struct dst_entry *path; unsigned long rate_last; /* rate limiting for ICMP */ - unsigned long rate_tokens; + unsigned int rate_tokens; + +#ifdef CONFIG_NET_CLS_ROUTE + __u32 tclassid; +#endif struct neighbour *neighbour; struct hh_cache *hh; @@ -65,10 +69,6 @@ struct dst_entry int (*input)(struct sk_buff*); int (*output)(struct sk_buff*); -#ifdef CONFIG_NET_CLS_ROUTE - __u32 tclassid; -#endif - struct dst_ops *ops; unsigned long lastuse; diff --git a/trunk/net/ipv4/icmp.c b/trunk/net/ipv4/icmp.c index e57f1673bf6b..37cdea0c26b4 100644 --- a/trunk/net/ipv4/icmp.c +++ b/trunk/net/ipv4/icmp.c @@ -275,18 +275,19 @@ static inline void icmp_xmit_unlock(void) #define XRLIM_BURST_FACTOR 6 int xrlim_allow(struct dst_entry *dst, int timeout) { - unsigned long now; + unsigned long now, token = dst->rate_tokens; int rc = 0; now = jiffies; - dst->rate_tokens += now - dst->rate_last; + token += now - dst->rate_last; dst->rate_last = now; - if (dst->rate_tokens > XRLIM_BURST_FACTOR * timeout) - dst->rate_tokens = XRLIM_BURST_FACTOR * timeout; - if (dst->rate_tokens >= timeout) { - dst->rate_tokens -= timeout; + if (token > XRLIM_BURST_FACTOR * timeout) + token = XRLIM_BURST_FACTOR * timeout; + if (token >= timeout) { + token -= timeout; rc = 1; } + dst->rate_tokens = token; return rc; }