Message ID | 1455270349-3187-6-git-send-email-deepa.kernel@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Fri, Feb 12, 2016 at 01:45:49AM -0800, Deepa Dinamani wrote: > This is in preparation for changing VFS inode timestamps to > use 64 bit time. > The VFS inode timestamps are not y2038 safe as they use > struct timespec. These will be changed to use struct timespec64 > instead and that is y2038 safe. > But, since the above data type conversion will break the > end file systems, use vfs_time functions to access inode times. > > current_fs_time() will change along with vfs timestamp data > type changes. > > xfs_vn_update_time() is a .update callback for inode operations > and this needs to change along with vfs inode times. This code is all different in the current XFS for-next branch. XFS no longer has it's own internal timestamps - it only uses the timestamps in the struct inode now. Cheers, Dave.
On Saturday 13 February 2016 13:18:32 Dave Chinner wrote: > On Fri, Feb 12, 2016 at 01:45:49AM -0800, Deepa Dinamani wrote: > > This is in preparation for changing VFS inode timestamps to > > use 64 bit time. > > The VFS inode timestamps are not y2038 safe as they use > > struct timespec. These will be changed to use struct timespec64 > > instead and that is y2038 safe. > > But, since the above data type conversion will break the > > end file systems, use vfs_time functions to access inode times. > > > > current_fs_time() will change along with vfs timestamp data > > type changes. > > > > xfs_vn_update_time() is a .update callback for inode operations > > and this needs to change along with vfs inode times. > > This code is all different in the current XFS for-next branch. > XFS no longer has it's own internal timestamps - it only uses the > timestamps in the struct inode now. Right, but as far as I can tell, this changes only contexts for variants 2a and 2c, and makes patch 2b a few lines shorter but does not impact whether any of the three approaches is workable or not. As you had some strong opinions on v1 of the series, could you take a look at the three variants of v2 and say if you have any preferences? It would be nice to agree on one approach so we can merge that patch 1/xx as soon as possible and start merging and adding further patches for the remaining file systems so we can eventually get to the interface change. Arnd -- To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/fs/xfs/xfs_inode.c b/fs/xfs/xfs_inode.c index ceba1a8..fc20e65 100644 --- a/fs/xfs/xfs_inode.c +++ b/fs/xfs/xfs_inode.c @@ -831,7 +831,7 @@ xfs_ialloc( ip->i_d.di_nextents = 0; ASSERT(ip->i_d.di_nblocks == 0); - tv = current_fs_time(mp->m_super); + tv = vfs_time_to_timespec(current_fs_time(mp->m_super)); ip->i_d.di_mtime.t_sec = (__int32_t)tv.tv_sec; ip->i_d.di_mtime.t_nsec = (__int32_t)tv.tv_nsec; ip->i_d.di_atime = ip->i_d.di_mtime; diff --git a/fs/xfs/xfs_trans_inode.c b/fs/xfs/xfs_trans_inode.c index b97f1df..e469e6a 100644 --- a/fs/xfs/xfs_trans_inode.c +++ b/fs/xfs/xfs_trans_inode.c @@ -68,24 +68,28 @@ xfs_trans_ichgtime( int flags) { struct inode *inode = VFS_I(ip); - struct timespec tv; + struct timespec now; + struct timespec ts; ASSERT(tp); ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL)); - tv = current_fs_time(inode->i_sb); + now = vfs_time_to_timespec(current_fs_time(inode->i_sb)); + ts = vfs_time_to_timespec(inode->i_mtime); if ((flags & XFS_ICHGTIME_MOD) && - !timespec_equal(&inode->i_mtime, &tv)) { - inode->i_mtime = tv; - ip->i_d.di_mtime.t_sec = tv.tv_sec; - ip->i_d.di_mtime.t_nsec = tv.tv_nsec; + !timespec_equal(&ts, &now)) { + inode->i_mtime = timespec_to_vfs_time(now); + ip->i_d.di_mtime.t_sec = now.tv_sec; + ip->i_d.di_mtime.t_nsec = now.tv_nsec; } + + ts = vfs_time_to_timespec(inode->i_ctime); if ((flags & XFS_ICHGTIME_CHG) && - !timespec_equal(&inode->i_ctime, &tv)) { - inode->i_ctime = tv; - ip->i_d.di_ctime.t_sec = tv.tv_sec; - ip->i_d.di_ctime.t_nsec = tv.tv_nsec; + !timespec_equal(&ts, &now)) { + inode->i_ctime = timespec_to_vfs_time(now); + ip->i_d.di_ctime.t_sec = now.tv_sec; + ip->i_d.di_ctime.t_nsec = now.tv_nsec; } }
This is in preparation for changing VFS inode timestamps to use 64 bit time. The VFS inode timestamps are not y2038 safe as they use struct timespec. These will be changed to use struct timespec64 instead and that is y2038 safe. But, since the above data type conversion will break the end file systems, use vfs_time functions to access inode times. current_fs_time() will change along with vfs timestamp data type changes. xfs_vn_update_time() is a .update callback for inode operations and this needs to change along with vfs inode times. Signed-off-by: Deepa Dinamani <deepa.kernel@gmail.com> --- fs/xfs/xfs_inode.c | 2 +- fs/xfs/xfs_trans_inode.c | 24 ++++++++++++++---------- 2 files changed, 15 insertions(+), 11 deletions(-)