Commit 0ac0478b authored by Arnd Bergmann's avatar Arnd Bergmann Committed by Greg Kroah-Hartman

staging/lustre: use 64-bit time for adaptive timeout

The adaptive timeout handling stores absolute times in 32-bit time_t
quantities, which will overflow in 2038.

This changes it to use time64_t.
Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
Signed-off-by: default avatarOleg Drokin <green@linuxhacker.ru>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 74e489aa
...@@ -61,12 +61,12 @@ ...@@ -61,12 +61,12 @@
#define AT_FLG_NOHIST 0x1 /* use last reported value only */ #define AT_FLG_NOHIST 0x1 /* use last reported value only */
struct adaptive_timeout { struct adaptive_timeout {
time_t at_binstart; /* bin start time */ time64_t at_binstart; /* bin start time */
unsigned int at_hist[AT_BINS]; /* timeout history bins */ unsigned int at_hist[AT_BINS]; /* timeout history bins */
unsigned int at_flags; unsigned int at_flags;
unsigned int at_current; /* current timeout value */ unsigned int at_current; /* current timeout value */
unsigned int at_worst_ever; /* worst-ever timeout value */ unsigned int at_worst_ever; /* worst-ever timeout value */
time_t at_worst_time; /* worst-ever timeout timestamp */ time64_t at_worst_time; /* worst-ever timeout timestamp */
spinlock_t at_lock; spinlock_t at_lock;
}; };
...@@ -351,7 +351,7 @@ static inline void at_reset(struct adaptive_timeout *at, int val) ...@@ -351,7 +351,7 @@ static inline void at_reset(struct adaptive_timeout *at, int val)
spin_lock(&at->at_lock); spin_lock(&at->at_lock);
at->at_current = val; at->at_current = val;
at->at_worst_ever = val; at->at_worst_ever = val;
at->at_worst_time = get_seconds(); at->at_worst_time = ktime_get_real_seconds();
spin_unlock(&at->at_lock); spin_unlock(&at->at_lock);
} }
static inline void at_init(struct adaptive_timeout *at, int val, int flags) static inline void at_init(struct adaptive_timeout *at, int val, int flags)
......
...@@ -1523,12 +1523,12 @@ extern unsigned int at_min, at_max, at_history; ...@@ -1523,12 +1523,12 @@ extern unsigned int at_min, at_max, at_history;
int at_measured(struct adaptive_timeout *at, unsigned int val) int at_measured(struct adaptive_timeout *at, unsigned int val)
{ {
unsigned int old = at->at_current; unsigned int old = at->at_current;
time_t now = get_seconds(); time64_t now = ktime_get_real_seconds();
time_t binlimit = max_t(time_t, at_history / AT_BINS, 1); long binlimit = max_t(long, at_history / AT_BINS, 1);
LASSERT(at); LASSERT(at);
CDEBUG(D_OTHER, "add %u to %p time=%lu v=%u (%u %u %u %u)\n", CDEBUG(D_OTHER, "add %u to %p time=%lu v=%u (%u %u %u %u)\n",
val, at, now - at->at_binstart, at->at_current, val, at, (long)(now - at->at_binstart), at->at_current,
at->at_hist[0], at->at_hist[1], at->at_hist[2], at->at_hist[3]); at->at_hist[0], at->at_hist[1], at->at_hist[2], at->at_hist[3]);
if (val == 0) if (val == 0)
...@@ -1553,7 +1553,7 @@ int at_measured(struct adaptive_timeout *at, unsigned int val) ...@@ -1553,7 +1553,7 @@ int at_measured(struct adaptive_timeout *at, unsigned int val)
int i, shift; int i, shift;
unsigned int maxv = val; unsigned int maxv = val;
/* move bins over */ /* move bins over */
shift = (now - at->at_binstart) / binlimit; shift = (u32)(now - at->at_binstart) / binlimit;
LASSERT(shift > 0); LASSERT(shift > 0);
for (i = AT_BINS - 1; i >= 0; i--) { for (i = AT_BINS - 1; i >= 0; i--) {
if (i >= shift) { if (i >= shift) {
......
...@@ -989,7 +989,7 @@ static int ptlrpc_lprocfs_timeouts_seq_show(struct seq_file *m, void *n) ...@@ -989,7 +989,7 @@ static int ptlrpc_lprocfs_timeouts_seq_show(struct seq_file *m, void *n)
struct ptlrpc_service *svc = m->private; struct ptlrpc_service *svc = m->private;
struct ptlrpc_service_part *svcpt; struct ptlrpc_service_part *svcpt;
struct dhms ts; struct dhms ts;
time_t worstt; time64_t worstt;
unsigned int cur; unsigned int cur;
unsigned int worst; unsigned int worst;
int i; int i;
...@@ -1004,11 +1004,11 @@ static int ptlrpc_lprocfs_timeouts_seq_show(struct seq_file *m, void *n) ...@@ -1004,11 +1004,11 @@ static int ptlrpc_lprocfs_timeouts_seq_show(struct seq_file *m, void *n)
cur = at_get(&svcpt->scp_at_estimate); cur = at_get(&svcpt->scp_at_estimate);
worst = svcpt->scp_at_estimate.at_worst_ever; worst = svcpt->scp_at_estimate.at_worst_ever;
worstt = svcpt->scp_at_estimate.at_worst_time; worstt = svcpt->scp_at_estimate.at_worst_time;
s2dhms(&ts, get_seconds() - worstt); s2dhms(&ts, ktime_get_real_seconds() - worstt);
seq_printf(m, "%10s : cur %3u worst %3u (at %ld, " seq_printf(m, "%10s : cur %3u worst %3u (at %lld, "
DHMS_FMT" ago) ", "service", DHMS_FMT" ago) ", "service",
cur, worst, worstt, DHMS_VARS(&ts)); cur, worst, (s64)worstt, DHMS_VARS(&ts));
lprocfs_at_hist_helper(m, &svcpt->scp_at_estimate); lprocfs_at_hist_helper(m, &svcpt->scp_at_estimate);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment