NTFS: Truncate {a,c,m}time to the ntfs supported time granularity when
authorAnton Altaparmakov <aia21@cantab.net>
Thu, 8 Sep 2005 20:15:09 +0000 (21:15 +0100)
committerAnton Altaparmakov <aia21@cantab.net>
Thu, 8 Sep 2005 20:15:09 +0000 (21:15 +0100)
      updating the times in the inode in ntfs_setattr().

Signed-off-by: Anton Altaparmakov <aia21@cantab.net>
fs/ntfs/ChangeLog
fs/ntfs/inode.c

index beed90c9f551c1f7886c5950a1e48efd53020629..9c5af9c8a8af52111d4ad02a9a94256de4f1cd81 100644 (file)
@@ -73,6 +73,8 @@ ToDo/Notes:
        - Fix cluster (de)allocators to work when the runlist is NULL and more
          importantly to take a locked runlist rather than them locking it
          which leads to lock reversal.
+       - Truncate {a,c,m}time to the ntfs supported time granularity when
+         updating the times in the inode in ntfs_setattr().
 
 2.1.23 - Implement extension of resident files and make writing safe as well as
         many bug fixes, cleanups, and enhancements...
index 886214a77f90dceba5a89fd2207197323546aac3..89d844f69244e90e05f920cf1bdc20a984e3dca2 100644 (file)
@@ -2430,16 +2430,18 @@ int ntfs_setattr(struct dentry *dentry, struct iattr *attr)
                         * We skipped the truncate but must still update
                         * timestamps.
                         */
-                       ia_valid |= ATTR_MTIME|ATTR_CTIME;
+                       ia_valid |= ATTR_MTIME | ATTR_CTIME;
                }
        }
-
        if (ia_valid & ATTR_ATIME)
-               vi->i_atime = attr->ia_atime;
+               vi->i_atime = timespec_trunc(attr->ia_atime,
+                               vi->i_sb->s_time_gran);
        if (ia_valid & ATTR_MTIME)
-               vi->i_mtime = attr->ia_mtime;
+               vi->i_mtime = timespec_trunc(attr->ia_mtime,
+                               vi->i_sb->s_time_gran);
        if (ia_valid & ATTR_CTIME)
-               vi->i_ctime = attr->ia_ctime;
+               vi->i_ctime = timespec_trunc(attr->ia_ctime,
+                               vi->i_sb->s_time_gran);
        mark_inode_dirty(vi);
 out:
        return err;