From: Andreas Gruenbacher Date: Fri, 22 Sep 2017 13:34:46 +0000 (-0500) Subject: gfs2: Support negative atimes X-Git-Tag: v4.15-rc1~133^2~13 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=38eedf2841b03b779710e8ad0442810a4747a348;p=thirdparty%2Fkernel%2Flinux.git 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 Signed-off-by: Bob Peterson --- diff --git a/fs/gfs2/inode.c b/fs/gfs2/inode.c index 863749e29bf90..b288cf2f85e62 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);