ata: fix "ering" sysfs time printing
The sysfs file for the libata error handling has multiple issues in the way it prints time stamps: * it prints a 9-digit nanosecond value using a %06lu format string, which drops some leading zeroes * it converts a 64-bit jiffes value to a timespec using jiffies_to_timespec(), which takes a 'long' argument, so the result is wrong after a jiffies overflow (49 days). * we try to avoid using timespec because that generally overflows in 2038, although this particular usage is ok. This replaces the jiffies_to_timespec call with an open-coded implementation that gets it right. Signed-off-by: Arnd Bergmann <arnd@arndb.de> Signed-off-by: Tejun Heo <tj@kernel.org>
This commit is contained in:
parent
8dbcad020f
commit
f3f99d37e6
@ -495,12 +495,13 @@ struct ata_show_ering_arg {
|
||||
static int ata_show_ering(struct ata_ering_entry *ent, void *void_arg)
|
||||
{
|
||||
struct ata_show_ering_arg* arg = void_arg;
|
||||
struct timespec time;
|
||||
u64 seconds;
|
||||
u32 rem;
|
||||
|
||||
jiffies_to_timespec(ent->timestamp,&time);
|
||||
seconds = div_u64_rem(ent->timestamp, HZ, &rem);
|
||||
arg->written += sprintf(arg->buf + arg->written,
|
||||
"[%5lu.%06lu]",
|
||||
time.tv_sec, time.tv_nsec);
|
||||
"[%5llu.%09lu]", seconds,
|
||||
rem * NSEC_PER_SEC / HZ);
|
||||
arg->written += get_ata_err_names(ent->err_mask,
|
||||
arg->buf + arg->written);
|
||||
return 0;
|
||||
|
Loading…
Reference in New Issue
Block a user