[PKT_SCHED]: Potential jiffy wrap bug in dev_watchdog().
authorStephen Hemminger <shemminger@osdl.org>
Tue, 16 May 2006 22:02:12 +0000 (15:02 -0700)
committerDavid S. Miller <davem@davemloft.net>
Tue, 16 May 2006 22:02:12 +0000 (15:02 -0700)
There is a potential jiffy wraparound bug in the transmit watchdog
that is easily avoided by using time_after().

Signed-off-by: Stephen Hemminger <shemminger@osdl.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/sched/sch_generic.c

index 31eb83717c267a799b013f073cfe3e99301709d9..138ea92ed268457b99d9c6b44a1a9580cc7c016a 100644 (file)
@@ -193,8 +193,10 @@ static void dev_watchdog(unsigned long arg)
                    netif_running(dev) &&
                    netif_carrier_ok(dev)) {
                        if (netif_queue_stopped(dev) &&
-                           (jiffies - dev->trans_start) > dev->watchdog_timeo) {
-                               printk(KERN_INFO "NETDEV WATCHDOG: %s: transmit timed out\n", dev->name);
+                           time_after(jiffies, dev->trans_start + dev->watchdog_timeo)) {
+
+                               printk(KERN_INFO "NETDEV WATCHDOG: %s: transmit timed out\n",
+                                      dev->name);
                                dev->tx_timeout(dev);
                        }
                        if (!mod_timer(&dev->watchdog_timer, jiffies + dev->watchdog_timeo))