aboutsummaryrefslogtreecommitdiffstats
path: root/net/ipv4/icmp.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/ipv4/icmp.c')
-rw-r--r--net/ipv4/icmp.c13
1 files changed, 7 insertions, 6 deletions
diff --git a/net/ipv4/icmp.c b/net/ipv4/icmp.c
index e57f1673bf6b..37cdea0c26b4 100644
--- a/net/ipv4/icmp.c
+++ b/net/ipv4/icmp.c
@@ -275,18 +275,19 @@ static inline void icmp_xmit_unlock(void)
275#define XRLIM_BURST_FACTOR 6 275#define XRLIM_BURST_FACTOR 6
276int xrlim_allow(struct dst_entry *dst, int timeout) 276int xrlim_allow(struct dst_entry *dst, int timeout)
277{ 277{
278 unsigned long now; 278 unsigned long now, token = dst->rate_tokens;
279 int rc = 0; 279 int rc = 0;
280 280
281 now = jiffies; 281 now = jiffies;
282 dst->rate_tokens += now - dst->rate_last; 282 token += now - dst->rate_last;
283 dst->rate_last = now; 283 dst->rate_last = now;
284 if (dst->rate_tokens > XRLIM_BURST_FACTOR * timeout) 284 if (token > XRLIM_BURST_FACTOR * timeout)
285 dst->rate_tokens = XRLIM_BURST_FACTOR * timeout; 285 token = XRLIM_BURST_FACTOR * timeout;
286 if (dst->rate_tokens >= timeout) { 286 if (token >= timeout) {
287 dst->rate_tokens -= timeout; 287 token -= timeout;
288 rc = 1; 288 rc = 1;
289 } 289 }
290 dst->rate_tokens = token;
290 return rc; 291 return rc;
291} 292}
292 293