diff options
author | Andreas Gruenbacher <agruenba@redhat.com> | 2017-09-22 15:34:46 +0200 |
---|---|---|
committer | Bob Peterson <rpeterso@redhat.com> | 2017-09-25 19:33:19 +0200 |
commit | 38eedf2841b03b779710e8ad0442810a4747a348 (patch) | |
tree | 4ee6e4833767f5790c8d02116a7e3212af9bd6f3 /fs/gfs2 | |
parent | gfs2: Update ctime in setflags ioctl (diff) | |
download | linux-38eedf2841b03b779710e8ad0442810a4747a348.tar.xz linux-38eedf2841b03b779710e8ad0442810a4747a348.zip |
gfs2: Support negative atimes
When inodes are read from disk, GFS2 will only update in-memory atimes
older than the on-disk atimes; this prevents atimes from going
backwards. The atimes of newly allocated inodes are initialized to 0.
This means that when an atime is explicitly set to a negative value,
this value will not persist.
Fix by setting the atime of newly allocated inodes to the lowest
possible value instead of 0.
Fixes xfstest generic/258.
Signed-off-by: Andreas Gruenbacher <agruenba@redhat.com>
Signed-off-by: Bob Peterson <rpeterso@redhat.com>
Diffstat (limited to 'fs/gfs2')
-rw-r--r-- | fs/gfs2/inode.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/fs/gfs2/inode.c b/fs/gfs2/inode.c index 863749e29bf9..b288cf2f85e6 100644 --- a/fs/gfs2/inode.c +++ b/fs/gfs2/inode.c @@ -189,7 +189,8 @@ struct inode *gfs2_inode_lookup(struct super_block *sb, unsigned int type, gfs2_set_iop(inode); - inode->i_atime.tv_sec = 0; + /* Lowest possible timestamp; will be overwritten in gfs2_dinode_in. */ + inode->i_atime.tv_sec = 1LL << (8 * sizeof(inode->i_atime.tv_sec) - 1); inode->i_atime.tv_nsec = 0; unlock_new_inode(inode); |