mirror of
https://github.com/torvalds/linux.git
synced 2024-11-10 22:21:40 +00:00
[NET] linkwatch: Handle jiffies wrap-around
The test used in the linkwatch does not handle wrap-arounds correctly. Since the intention of the code is to eliminate bursts of messages we can afford to delay things up to a second. Using that fact we can easily handle wrap-arounds by making sure that we don't delay things by more than one second. This is based on diagnosis and a patch by Stefan Rompf. Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au> Acked-by: Stefan Rompf <stefan@loplof.de> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
788252e661
commit
8c1056839e
@ -170,13 +170,13 @@ void linkwatch_fire_event(struct net_device *dev)
|
||||
spin_unlock_irqrestore(&lweventlist_lock, flags);
|
||||
|
||||
if (!test_and_set_bit(LW_RUNNING, &linkwatch_flags)) {
|
||||
unsigned long thisevent = jiffies;
|
||||
unsigned long delay = linkwatch_nextevent - jiffies;
|
||||
|
||||
if (thisevent >= linkwatch_nextevent) {
|
||||
/* If we wrap around we'll delay it by at most HZ. */
|
||||
if (!delay || delay > HZ)
|
||||
schedule_work(&linkwatch_work);
|
||||
} else {
|
||||
schedule_delayed_work(&linkwatch_work, linkwatch_nextevent - thisevent);
|
||||
}
|
||||
else
|
||||
schedule_delayed_work(&linkwatch_work, delay);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user