• Dave Johnson's avatar
    [IPV4]: Fix negative timer loop with lots of ipv4 peers. · 1344a416
    Dave Johnson authored
    From: Dave Johnson <djohnson+linux-kernel@sw.starentnetworks.com>
    
    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.
    Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    1344a416
inetpeer.c 14.4 KB