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

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