time: jiffies_delta_to_clock_t() helper to the rescue
authorEric Dumazet <edumazet@google.com>
Wed, 8 Aug 2012 21:13:53 +0000 (21:13 +0000)
committerDavid S. Miller <davem@davemloft.net>
Thu, 9 Aug 2012 23:17:03 +0000 (16:17 -0700)
commita399a8053164ec8bcb06fed52be9941a26ecde11
treec60402a77d08c82630d63e972d32b038919b827f
parent79cda75a107da0d49732b5cb642b456264dd7e0e
time: jiffies_delta_to_clock_t() helper to the rescue

Various /proc/net files sometimes report crazy timer values, expressed
in clock_t units.

This happens when an expired timer delta (expires - jiffies) is passed
to jiffies_to_clock_t().

This function has an overflow in :

return div_u64((u64)x * TICK_NSEC, NSEC_PER_SEC / USER_HZ);

commit cbbc719fccdb8cb (time: Change jiffies_to_clock_t() argument type
to unsigned long) only got around the problem.

As we cant output negative values in /proc/net/tcp without breaking
various tools, I suggest adding a jiffies_delta_to_clock_t() wrapper
that caps the negative delta to a 0 value.

Signed-off-by: Eric Dumazet <edumazet@google.com>
Reported-by: Maciej Żenczykowski <maze@google.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Paul Gortmaker <paul.gortmaker@windriver.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: hank <pyu@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/linux/jiffies.h
net/bridge/br_fdb.c
net/bridge/br_stp_timer.c
net/core/rtnetlink.c
net/ipv4/igmp.c
net/ipv4/tcp_ipv4.c
net/ipv6/tcp_ipv6.c