Since the Linux kernel's utimens family of functions uses
current_kernel_time(), we need to do the same in the context of ZFS
or else there can be discrepencies in timestamps (they go backward)
if userland code does:
fd = creat(FNAME, 0600);
(void) futimens(fd, NULL);
The getnstimeofday() function generally returns a slightly lower time
value.
Signed-off-by: Tim Chase <tim@chase2k.com>
Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Closes zfsonlinux/zfs#3006
static inline void
gethrestime(timestruc_t *now)
{
- struct timespec ts;
- getnstimeofday(&ts);
- now->tv_sec = ts.tv_sec;
- now->tv_nsec = ts.tv_nsec;
+ *now = current_kernel_time();
}
static inline time_t
gethrestime_sec(void)
{
struct timespec ts;
- getnstimeofday(&ts);
+ ts = current_kernel_time();
return (ts.tv_sec);
}