diff options
author | Nicolas Dichtel <nicolas.dichtel@6wind.com> | 2012-09-27 00:11:00 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2012-09-27 19:27:39 -0400 |
commit | bc9259a8bae9e814fc1f775a1b3effa13e6ad330 (patch) | |
tree | 22ec65e032e8080daca4e9ac4dd5227b532a4040 | |
parent | 68b3f28c11bf896be32ad2a2e151aaa5f4a7c98e (diff) |
inetpeer: fix token initialization
When jiffies wraps around (for example, 5 minutes after the boot, see
INITIAL_JIFFIES) and peer has just been created, now - peer->rate_last can be
< XRLIM_BURST_FACTOR * timeout, so token is not set to the maximum value, thus
some icmp packets can be unexpectedly dropped.
Fix this case by initializing last_rate to 60 seconds in the past.
Signed-off-by: Nicolas Dichtel <nicolas.dichtel@6wind.com>
Signed-off-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | net/ipv4/inetpeer.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/net/ipv4/inetpeer.c b/net/ipv4/inetpeer.c index e1e0a4e8fd34..c7527f6b9ad9 100644 --- a/net/ipv4/inetpeer.c +++ b/net/ipv4/inetpeer.c | |||
@@ -510,7 +510,10 @@ relookup: | |||
510 | secure_ipv6_id(daddr->addr.a6)); | 510 | secure_ipv6_id(daddr->addr.a6)); |
511 | p->metrics[RTAX_LOCK-1] = INETPEER_METRICS_NEW; | 511 | p->metrics[RTAX_LOCK-1] = INETPEER_METRICS_NEW; |
512 | p->rate_tokens = 0; | 512 | p->rate_tokens = 0; |
513 | p->rate_last = 0; | 513 | /* 60*HZ is arbitrary, but chosen enough high so that the first |
514 | * calculation of tokens is at its maximum. | ||
515 | */ | ||
516 | p->rate_last = jiffies - 60*HZ; | ||
514 | INIT_LIST_HEAD(&p->gc_list); | 517 | INIT_LIST_HEAD(&p->gc_list); |
515 | 518 | ||
516 | /* Link the node. */ | 519 | /* Link the node. */ |