Blame SOURCES/xfsprogs-5.5.0-xfs-use-a-struct-timespec64-for-the-in-core-crtime.patch

5d5cbe
From cb49e9a41477791af390a397c97da28da31fb81d Mon Sep 17 00:00:00 2001
5d5cbe
From: Christoph Hellwig <hch@lst.de>
5d5cbe
Date: Wed, 22 Jan 2020 11:29:44 -0500
5d5cbe
Subject: [PATCH] xfs: use a struct timespec64 for the in-core crtime
5d5cbe
5d5cbe
Source kernel commit: 8d2d878db897d7501aaa2f72e10bb28295bb5498
5d5cbe
5d5cbe
struct xfs_icdinode is purely an in-memory data structure, so don't use
5d5cbe
a log on-disk structure for it.  This simplifies the code a bit, and
5d5cbe
also reduces our include hell slightly.
5d5cbe
5d5cbe
Signed-off-by: Christoph Hellwig <hch@lst.de>
5d5cbe
Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>
5d5cbe
[darrick: fix a minor indenting problem in xfs_trans_ichgtime]
5d5cbe
Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
5d5cbe
Signed-off-by: Eric Sandeen <sandeen@sandeen.net>
5d5cbe
---
5d5cbe
5d5cbe
diff --git a/include/libxfs.h b/include/libxfs.h
5d5cbe
index 2bdef70..731561c 100644
5d5cbe
--- a/include/libxfs.h
5d5cbe
+++ b/include/libxfs.h
5d5cbe
@@ -36,6 +36,8 @@ extern uint32_t crc32c_le(uint32_t crc, unsigned char const *p, size_t len);
5d5cbe
 
5d5cbe
 #include "xfs_cksum.h"
5d5cbe
 
5d5cbe
+#define timespec64 timespec
5d5cbe
+
5d5cbe
 /*
5d5cbe
  * This mirrors the kernel include for xfs_buf.h - it's implicitly included in
5d5cbe
  * every files via a similar include in the kernel xfs_linux.h.
5d5cbe
diff --git a/include/xfs_inode.h b/include/xfs_inode.h
5d5cbe
index 76f9ac7..e03d1cb 100644
5d5cbe
--- a/include/xfs_inode.h
5d5cbe
+++ b/include/xfs_inode.h
5d5cbe
@@ -161,7 +161,6 @@ extern void	libxfs_trans_ichgtime(struct xfs_trans *,
5d5cbe
 				struct xfs_inode *, int);
5d5cbe
 extern int	libxfs_iflush_int (struct xfs_inode *, struct xfs_buf *);
5d5cbe
 
5d5cbe
-#define timespec64 timespec
5d5cbe
 extern struct timespec64 current_time(struct inode *inode);
5d5cbe
 
5d5cbe
 /* Inode Cache Interfaces */
5d5cbe
diff --git a/libxfs/libxfs_priv.h b/libxfs/libxfs_priv.h
5d5cbe
index b45d07e..8232f89 100644
5d5cbe
--- a/libxfs/libxfs_priv.h
5d5cbe
+++ b/libxfs/libxfs_priv.h
5d5cbe
@@ -62,6 +62,8 @@ extern kmem_zone_t *xfs_buf_zone;
5d5cbe
 extern kmem_zone_t *xfs_inode_zone;
5d5cbe
 extern kmem_zone_t *xfs_trans_zone;
5d5cbe
 
5d5cbe
+#define timespec64 timespec
5d5cbe
+
5d5cbe
 /* CRC stuff, buffer API dependent on it */
5d5cbe
 #define crc32c(c,p,l)	crc32c_le((c),(unsigned char const *)(p),(l))
5d5cbe
 
5d5cbe
diff --git a/libxfs/util.c b/libxfs/util.c
5d5cbe
index 951f7cf..9383bb8 100644
5d5cbe
--- a/libxfs/util.c
5d5cbe
+++ b/libxfs/util.c
5d5cbe
@@ -170,10 +170,8 @@ libxfs_trans_ichgtime(
5d5cbe
 		VFS_I(ip)->i_mtime = tv;
5d5cbe
 	if (flags & XFS_ICHGTIME_CHG)
5d5cbe
 		VFS_I(ip)->i_ctime = tv;
5d5cbe
-	if (flags & XFS_ICHGTIME_CREATE) {
5d5cbe
-		ip->i_d.di_crtime.t_sec = (int32_t)tv.tv_sec;
5d5cbe
-		ip->i_d.di_crtime.t_nsec = (int32_t)tv.tv_nsec;
5d5cbe
-	}
5d5cbe
+	if (flags & XFS_ICHGTIME_CREATE)
5d5cbe
+		ip->i_d.di_crtime = tv;
5d5cbe
 }
5d5cbe
 
5d5cbe
 STATIC uint16_t
5d5cbe
@@ -321,8 +319,8 @@ libxfs_ialloc(
5d5cbe
 		VFS_I(ip)->i_version = 1;
5d5cbe
 		ip->i_d.di_flags2 = pip ? 0 : xfs_flags2diflags2(ip,
5d5cbe
 				fsx->fsx_xflags);
5d5cbe
-		ip->i_d.di_crtime.t_sec = (int32_t)VFS_I(ip)->i_mtime.tv_sec;
5d5cbe
-		ip->i_d.di_crtime.t_nsec = (int32_t)VFS_I(ip)->i_mtime.tv_nsec;
5d5cbe
+		ip->i_d.di_crtime.tv_sec = (int32_t)VFS_I(ip)->i_mtime.tv_sec;
5d5cbe
+		ip->i_d.di_crtime.tv_nsec = (int32_t)VFS_I(ip)->i_mtime.tv_nsec;
5d5cbe
 		ip->i_d.di_cowextsize = pip ? 0 : fsx->fsx_cowextsize;
5d5cbe
 	}
5d5cbe
 
5d5cbe
diff --git a/libxfs/xfs_inode_buf.c b/libxfs/xfs_inode_buf.c
5d5cbe
index 503990f..975f097 100644
5d5cbe
--- a/libxfs/xfs_inode_buf.c
5d5cbe
+++ b/libxfs/xfs_inode_buf.c
5d5cbe
@@ -254,8 +254,8 @@ xfs_inode_from_disk(
5d5cbe
 	if (to->di_version == 3) {
5d5cbe
 		inode_set_iversion_queried(inode,
5d5cbe
 					   be64_to_cpu(from->di_changecount));
5d5cbe
-		to->di_crtime.t_sec = be32_to_cpu(from->di_crtime.t_sec);
5d5cbe
-		to->di_crtime.t_nsec = be32_to_cpu(from->di_crtime.t_nsec);
5d5cbe
+		to->di_crtime.tv_sec = be32_to_cpu(from->di_crtime.t_sec);
5d5cbe
+		to->di_crtime.tv_nsec = be32_to_cpu(from->di_crtime.t_nsec);
5d5cbe
 		to->di_flags2 = be64_to_cpu(from->di_flags2);
5d5cbe
 		to->di_cowextsize = be32_to_cpu(from->di_cowextsize);
5d5cbe
 	}
5d5cbe
@@ -304,8 +304,8 @@ xfs_inode_to_disk(
5d5cbe
 
5d5cbe
 	if (from->di_version == 3) {
5d5cbe
 		to->di_changecount = cpu_to_be64(inode_peek_iversion(inode));
5d5cbe
-		to->di_crtime.t_sec = cpu_to_be32(from->di_crtime.t_sec);
5d5cbe
-		to->di_crtime.t_nsec = cpu_to_be32(from->di_crtime.t_nsec);
5d5cbe
+		to->di_crtime.t_sec = cpu_to_be32(from->di_crtime.tv_sec);
5d5cbe
+		to->di_crtime.t_nsec = cpu_to_be32(from->di_crtime.tv_nsec);
5d5cbe
 		to->di_flags2 = cpu_to_be64(from->di_flags2);
5d5cbe
 		to->di_cowextsize = cpu_to_be32(from->di_cowextsize);
5d5cbe
 		to->di_ino = cpu_to_be64(ip->i_ino);
5d5cbe
diff --git a/libxfs/xfs_inode_buf.h b/libxfs/xfs_inode_buf.h
5d5cbe
index ab0f841..c9ac69c 100644
5d5cbe
--- a/libxfs/xfs_inode_buf.h
5d5cbe
+++ b/libxfs/xfs_inode_buf.h
5d5cbe
@@ -37,7 +37,7 @@ struct xfs_icdinode {
5d5cbe
 	uint64_t	di_flags2;	/* more random flags */
5d5cbe
 	uint32_t	di_cowextsize;	/* basic cow extent size for file */
5d5cbe
 
5d5cbe
-	xfs_ictimestamp_t di_crtime;	/* time created */
5d5cbe
+	struct timespec64 di_crtime;	/* time created */
5d5cbe
 };
5d5cbe
 
5d5cbe
 /*