Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

xfs: use a struct timespec64 for the in-core crtime

struct xfs_icdinode is purely an in-memory data structure, so don't use
a log on-disk structure for it. This simplifies the code a bit, and
also reduces our include hell slightly.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>
[darrick: fix a minor indenting problem in xfs_trans_ichgtime]
Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>

authored by

Christoph Hellwig and committed by
Darrick J. Wong
8d2d878d d8d11fc7

+14 -18
+4 -4
fs/xfs/libxfs/xfs_inode_buf.c
··· 256 256 if (to->di_version == 3) { 257 257 inode_set_iversion_queried(inode, 258 258 be64_to_cpu(from->di_changecount)); 259 - to->di_crtime.t_sec = be32_to_cpu(from->di_crtime.t_sec); 260 - to->di_crtime.t_nsec = be32_to_cpu(from->di_crtime.t_nsec); 259 + to->di_crtime.tv_sec = be32_to_cpu(from->di_crtime.t_sec); 260 + to->di_crtime.tv_nsec = be32_to_cpu(from->di_crtime.t_nsec); 261 261 to->di_flags2 = be64_to_cpu(from->di_flags2); 262 262 to->di_cowextsize = be32_to_cpu(from->di_cowextsize); 263 263 } ··· 306 306 307 307 if (from->di_version == 3) { 308 308 to->di_changecount = cpu_to_be64(inode_peek_iversion(inode)); 309 - to->di_crtime.t_sec = cpu_to_be32(from->di_crtime.t_sec); 310 - to->di_crtime.t_nsec = cpu_to_be32(from->di_crtime.t_nsec); 309 + to->di_crtime.t_sec = cpu_to_be32(from->di_crtime.tv_sec); 310 + to->di_crtime.t_nsec = cpu_to_be32(from->di_crtime.tv_nsec); 311 311 to->di_flags2 = cpu_to_be64(from->di_flags2); 312 312 to->di_cowextsize = cpu_to_be32(from->di_cowextsize); 313 313 to->di_ino = cpu_to_be64(ip->i_ino);
+1 -1
fs/xfs/libxfs/xfs_inode_buf.h
··· 37 37 uint64_t di_flags2; /* more random flags */ 38 38 uint32_t di_cowextsize; /* basic cow extent size for file */ 39 39 40 - xfs_ictimestamp_t di_crtime; /* time created */ 40 + struct timespec64 di_crtime; /* time created */ 41 41 }; 42 42 43 43 /*
+3 -5
fs/xfs/libxfs/xfs_trans_inode.c
··· 55 55 int flags) 56 56 { 57 57 struct inode *inode = VFS_I(ip); 58 - struct timespec64 tv; 58 + struct timespec64 tv; 59 59 60 60 ASSERT(tp); 61 61 ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL)); ··· 66 66 inode->i_mtime = tv; 67 67 if (flags & XFS_ICHGTIME_CHG) 68 68 inode->i_ctime = tv; 69 - if (flags & XFS_ICHGTIME_CREATE) { 70 - ip->i_d.di_crtime.t_sec = (int32_t)tv.tv_sec; 71 - ip->i_d.di_crtime.t_nsec = (int32_t)tv.tv_nsec; 72 - } 69 + if (flags & XFS_ICHGTIME_CREATE) 70 + ip->i_d.di_crtime = tv; 73 71 } 74 72 75 73 /*
+1 -2
fs/xfs/xfs_inode.c
··· 851 851 inode_set_iversion(inode, 1); 852 852 ip->i_d.di_flags2 = 0; 853 853 ip->i_d.di_cowextsize = 0; 854 - ip->i_d.di_crtime.t_sec = (int32_t)tv.tv_sec; 855 - ip->i_d.di_crtime.t_nsec = (int32_t)tv.tv_nsec; 854 + ip->i_d.di_crtime = tv; 856 855 } 857 856 858 857
+2 -2
fs/xfs/xfs_inode_item.c
··· 341 341 342 342 if (from->di_version == 3) { 343 343 to->di_changecount = inode_peek_iversion(inode); 344 - to->di_crtime.t_sec = from->di_crtime.t_sec; 345 - to->di_crtime.t_nsec = from->di_crtime.t_nsec; 344 + to->di_crtime.t_sec = from->di_crtime.tv_sec; 345 + to->di_crtime.t_nsec = from->di_crtime.tv_nsec; 346 346 to->di_flags2 = from->di_flags2; 347 347 to->di_cowextsize = from->di_cowextsize; 348 348 to->di_ino = ip->i_ino;
+1 -2
fs/xfs/xfs_iops.c
··· 554 554 if (ip->i_d.di_version == 3) { 555 555 if (request_mask & STATX_BTIME) { 556 556 stat->result_mask |= STATX_BTIME; 557 - stat->btime.tv_sec = ip->i_d.di_crtime.t_sec; 558 - stat->btime.tv_nsec = ip->i_d.di_crtime.t_nsec; 557 + stat->btime = ip->i_d.di_crtime; 559 558 } 560 559 } 561 560
+2 -2
fs/xfs/xfs_itable.c
··· 97 97 buf->bs_mtime_nsec = inode->i_mtime.tv_nsec; 98 98 buf->bs_ctime = inode->i_ctime.tv_sec; 99 99 buf->bs_ctime_nsec = inode->i_ctime.tv_nsec; 100 - buf->bs_btime = dic->di_crtime.t_sec; 101 - buf->bs_btime_nsec = dic->di_crtime.t_nsec; 100 + buf->bs_btime = dic->di_crtime.tv_sec; 101 + buf->bs_btime_nsec = dic->di_crtime.tv_nsec; 102 102 buf->bs_gen = inode->i_generation; 103 103 buf->bs_mode = inode->i_mode; 104 104