aboutsummaryrefslogtreecommitdiffstats
path: root/module/zfs/zpl_inode.c
diff options
context:
space:
mode:
authorNikolay Borisov <[email protected]>2016-09-12 22:35:56 +0300
committerBrian Behlendorf <[email protected]>2016-09-13 12:00:18 -0700
commit87f9371aefca857e7091dfdee3ec2d36b0de54c4 (patch)
tree8769eb3e29dd3fa77ca59e4552201f8e4ab1f355 /module/zfs/zpl_inode.c
parent9f5f0019ab3c03f59060d752b0be69290ec1abb9 (diff)
Simplify time handling logic in zfs_settattr
Simplify time handling in zfs_setattr by mimicking the logic in setattr_copy from the linux kernel. In order to achieve this in the case when ZFS' log is being replayed it is necessary to unconditionally set the ctime in zfs_replay_setattr. Also use the timespec_trunc function when assigning values to the generic inode struct. This is currently a noop since zfs sets s_time_gran to 1, however in the future rules about precision might change. Reviewed-by: Brian Behlendorf <[email protected]> Reviewed-by: Chunwei Chen <[email protected]> Signed-off-by: Nikolay Borisov <[email protected]> Closes #4916
Diffstat (limited to 'module/zfs/zpl_inode.c')
-rw-r--r--module/zfs/zpl_inode.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/module/zfs/zpl_inode.c b/module/zfs/zpl_inode.c
index 8c75698e5..010f0fd4e 100644
--- a/module/zfs/zpl_inode.c
+++ b/module/zfs/zpl_inode.c
@@ -335,7 +335,8 @@ zpl_setattr(struct dentry *dentry, struct iattr *ia)
vap->va_ctime = ia->ia_ctime;
if (vap->va_mask & ATTR_ATIME)
- ip->i_atime = ia->ia_atime;
+ ip->i_atime = timespec_trunc(ia->ia_atime,
+ ip->i_sb->s_time_gran);
cookie = spl_fstrans_mark();
error = -zfs_setattr(ip, vap, 0, cr);