lkml.org 
[lkml]   [2005]   [Aug]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
Date
From
Subject[PATCH] negative timer loop with lots of IPv4 peers

Found this bug while doing some scaling testing that created 500K inet
peers.

peer_check_expire() in net/ipv4/inetpeer.c isn't using
inet_peer_gc_mintime correctly and will end up creating an expire timer
with less than the minimum duration, and even zero/negative if enough
active peers are present.

If >65K peers, the timer will be less than inet_peer_gc_mintime, and
with >70K peers, the timer duration will reach zero and go negative.

The timer handler will continue to schedule another zero/negative
timer in a loop until peers can be aged. This can continue for
at least a few minutes or even longer if the peers remain active due
to arriving packets while the loop is occurring.

Bug is present in both 2.4 and 2.6. Same patch will apply to both just
fine.

--
Dave Johnson
Starent Networks


===== net/ipv4/inetpeer.c 1.12 vs edited =====
--- 1.12/net/ipv4/inetpeer.c 2005-06-24 16:16:59 -04:00
+++ edited/net/ipv4/inetpeer.c 2005-08-19 10:34:00 -04:00
@@ -490,10 +490,13 @@
/* Trigger the timer after inet_peer_gc_mintime .. inet_peer_gc_maxtime
* interval depending on the total number of entries (more entries,
* less interval). */
- peer_periodic_timer.expires = jiffies
- + inet_peer_gc_maxtime
- - (inet_peer_gc_maxtime - inet_peer_gc_mintime) / HZ *
- peer_total / inet_peer_threshold * HZ;
+ if (peer_total >= inet_peer_threshold)
+ peer_periodic_timer.expires = jiffies + inet_peer_gc_mintime;
+ else
+ peer_periodic_timer.expires = jiffies
+ + inet_peer_gc_maxtime
+ - (inet_peer_gc_maxtime - inet_peer_gc_mintime) / HZ *
+ peer_total / inet_peer_threshold * HZ;
add_timer(&peer_periodic_timer);
}

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/

\
 
 \ /
  Last update: 2005-08-19 19:26    [W:0.029 / U:0.572 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site