Blame SOURCES/xfsprogs-5.10.0-xfs-redefine-xfs_ictimestamp_t.patch

f49185
From fc3e21db4a30d0d81158938cabba0fb59fc57ad8 Mon Sep 17 00:00:00 2001
f49185
From: "Darrick J. Wong" <darrick.wong@oracle.com>
f49185
Date: Wed, 11 Nov 2020 13:48:47 -0500
f49185
Subject: [PATCH] xfs: redefine xfs_ictimestamp_t
f49185
f49185
Source kernel commit: 30e05599219f3c15bd5f24190af0e33cdb4a00e5
f49185
f49185
Redefine xfs_ictimestamp_t as a uint64_t typedef in preparation for the
f49185
bigtime functionality.  Preserve the legacy structure format so that we
f49185
can let the compiler take care of the masking and shifting.
f49185
f49185
Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
f49185
Reviewed-by: Christoph Hellwig <hch@lst.de>
f49185
Reviewed-by: Gao Xiang <hsiangkao@redhat.com>
f49185
Reviewed-by: Dave Chinner <dchinner@redhat.com>
f49185
Signed-off-by: Eric Sandeen <sandeen@sandeen.net>
f49185
---
f49185
f49185
diff --git a/libxfs/xfs_log_format.h b/libxfs/xfs_log_format.h
f49185
index e5f97c6..8dc0df0 100644
f49185
--- a/libxfs/xfs_log_format.h
f49185
+++ b/libxfs/xfs_log_format.h
f49185
@@ -368,10 +368,13 @@ static inline int xfs_ilog_fdata(int w)
f49185
  * directly mirrors the xfs_dinode structure as it must contain all the same
f49185
  * information.
f49185
  */
f49185
-typedef struct xfs_ictimestamp {
f49185
+typedef uint64_t xfs_ictimestamp_t;
f49185
+
f49185
+/* Legacy timestamp encoding format. */
f49185
+struct xfs_legacy_ictimestamp {
f49185
 	int32_t		t_sec;		/* timestamp seconds */
f49185
 	int32_t		t_nsec;		/* timestamp nanoseconds */
f49185
-} xfs_ictimestamp_t;
f49185
+};
f49185
 
f49185
 /*
f49185
  * Define the format of the inode core that is logged. This structure must be
f49185
diff --git a/logprint/log_misc.c b/logprint/log_misc.c
f49185
index c325f04..4fad82b 100644
f49185
--- a/logprint/log_misc.c
f49185
+++ b/logprint/log_misc.c
f49185
@@ -446,8 +446,10 @@ xlog_print_trans_inode_core(
f49185
 	   (int)ip->di_format);
f49185
     printf(_("nlink %hd uid %d gid %d\n"),
f49185
 	   ip->di_nlink, ip->di_uid, ip->di_gid);
f49185
-    printf(_("atime 0x%x mtime 0x%x ctime 0x%x\n"),
f49185
-	   ip->di_atime.t_sec, ip->di_mtime.t_sec, ip->di_ctime.t_sec);
f49185
+    printf(_("atime 0x%llx mtime 0x%llx ctime 0x%llx\n"),
f49185
+		xlog_extract_dinode_ts(ip->di_atime),
f49185
+		xlog_extract_dinode_ts(ip->di_mtime),
f49185
+		xlog_extract_dinode_ts(ip->di_ctime));
f49185
     printf(_("size 0x%llx nblocks 0x%llx extsize 0x%x nextents 0x%x\n"),
f49185
 	   (unsigned long long)ip->di_size, (unsigned long long)ip->di_nblocks,
f49185
 	   ip->di_extsize, ip->di_nextents);
f49185
@@ -739,6 +741,16 @@ xlog_print_trans_icreate(
f49185
  ******************************************************************************
f49185
  */
f49185
 
f49185
+time64_t
f49185
+xlog_extract_dinode_ts(
f49185
+	const xfs_ictimestamp_t		its)
f49185
+{
f49185
+	struct xfs_legacy_ictimestamp	*lits;
f49185
+
f49185
+	lits = (struct xfs_legacy_ictimestamp *)&its;
f49185
+	return (time64_t)lits->t_sec;
f49185
+}
f49185
+
f49185
 void
f49185
 xlog_print_lseek(struct xlog *log, int fd, xfs_daddr_t blkno, int whence)
f49185
 {
f49185
diff --git a/logprint/log_print_all.c b/logprint/log_print_all.c
f49185
index eafffe2..3ca01b1 100644
f49185
--- a/logprint/log_print_all.c
f49185
+++ b/logprint/log_print_all.c
f49185
@@ -249,8 +249,10 @@ xlog_recover_print_inode_core(
f49185
 	printf(_("		uid:%d  gid:%d  nlink:%d projid:0x%04x%04x\n"),
f49185
 	       di->di_uid, di->di_gid, di->di_nlink,
f49185
 	       di->di_projid_hi, di->di_projid_lo);
f49185
-	printf(_("		atime:%d  mtime:%d  ctime:%d\n"),
f49185
-	       di->di_atime.t_sec, di->di_mtime.t_sec, di->di_ctime.t_sec);
f49185
+	printf(_("		atime:%lld  mtime:%lld  ctime:%lld\n"),
f49185
+			xlog_extract_dinode_ts(di->di_atime),
f49185
+			xlog_extract_dinode_ts(di->di_mtime),
f49185
+			xlog_extract_dinode_ts(di->di_ctime));
f49185
 	printf(_("		flushiter:%d\n"), di->di_flushiter);
f49185
 	printf(_("		size:0x%llx  nblks:0x%llx  exsize:%d  "
f49185
 	     "nextents:%d  anextents:%d\n"), (unsigned long long)
f49185
diff --git a/logprint/logprint.h b/logprint/logprint.h
f49185
index 98ac0d4..0061d5a 100644
f49185
--- a/logprint/logprint.h
f49185
+++ b/logprint/logprint.h
f49185
@@ -18,6 +18,7 @@ extern int	print_no_data;
f49185
 extern int	print_no_print;
f49185
 
f49185
 /* exports */
f49185
+extern time64_t xlog_extract_dinode_ts(const xfs_ictimestamp_t);
f49185
 extern void xlog_print_lseek(struct xlog *, int, xfs_daddr_t, int);
f49185
 
f49185
 extern void xfs_log_copy(struct xlog *, int, char *);