netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] inetpeer: ensure to set the maximum tokens the first time
@ 2012-09-27 12:33 Nicolas Dichtel
  2012-09-27 12:53 ` Eric Dumazet
  0 siblings, 1 reply; 9+ messages in thread
From: Nicolas Dichtel @ 2012-09-27 12:33 UTC (permalink / raw)
  To: netdev, davem; +Cc: Nicolas Dichtel

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.

With this patch, it's still possible that last_rate and rate_tokens are 0 at the
same time after jiffies wraps round, but the probability is very low and the
only consequence is to let some ICMP packets bypass the filter.

Signed-off-by: Nicolas Dichtel <nicolas.dichtel@6wind.com>
---
 net/ipv4/inetpeer.c | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/net/ipv4/inetpeer.c b/net/ipv4/inetpeer.c
index e1e0a4e..92fec02 100644
--- a/net/ipv4/inetpeer.c
+++ b/net/ipv4/inetpeer.c
@@ -559,10 +559,14 @@ bool inet_peer_xrlim_allow(struct inet_peer *peer, int timeout)
 
 	token = peer->rate_tokens;
 	now = jiffies;
-	token += now - peer->rate_last;
-	peer->rate_last = now;
-	if (token > XRLIM_BURST_FACTOR * timeout)
+	if (!peer->rate_last && !token)
 		token = XRLIM_BURST_FACTOR * timeout;
+	else {
+		token += now - peer->rate_last;
+		if (token > XRLIM_BURST_FACTOR * timeout)
+			token = XRLIM_BURST_FACTOR * timeout;
+	}
+	peer->rate_last = now;
 	if (token >= timeout) {
 		token -= timeout;
 		rc = true;
-- 
1.7.12

^ permalink raw reply related	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2012-09-27 23:28 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-09-27 12:33 [PATCH] inetpeer: ensure to set the maximum tokens the first time Nicolas Dichtel
2012-09-27 12:53 ` Eric Dumazet
2012-09-27 13:21   ` Nicolas Dichtel
2012-09-27 13:30     ` Eric Dumazet
2012-09-27 13:34       ` Eric Dumazet
2012-09-27 13:39         ` Nicolas Dichtel
2012-09-27 14:11         ` [PATCH v2] inetpeer: fix token initialization Nicolas Dichtel
2012-09-27 14:18           ` Eric Dumazet
2012-09-27 23:28             ` David Miller

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).