Commit 30e05599 authored by Darrick J. Wong's avatar Darrick J. Wong
Browse files

xfs: redefine xfs_ictimestamp_t



Redefine xfs_ictimestamp_t as a uint64_t typedef in preparation for the
bigtime functionality.  Preserve the legacy structure format so that we
can let the compiler take care of the masking and shifting.

Signed-off-by: default avatarDarrick J. Wong <darrick.wong@oracle.com>
Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
Reviewed-by: default avatarGao Xiang <hsiangkao@redhat.com>
Reviewed-by: default avatarDave Chinner <dchinner@redhat.com>
parent 5a0bb066
Loading
Loading
Loading
Loading
+5 −2
Original line number Diff line number Diff line
@@ -368,10 +368,13 @@ static inline int xfs_ilog_fdata(int w)
 * directly mirrors the xfs_dinode structure as it must contain all the same
 * information.
 */
typedef struct xfs_ictimestamp {
typedef uint64_t xfs_ictimestamp_t;

/* Legacy timestamp encoding format. */
struct xfs_legacy_ictimestamp {
	int32_t		t_sec;		/* timestamp seconds */
	int32_t		t_nsec;		/* timestamp nanoseconds */
} xfs_ictimestamp_t;
};

/*
 * Define the format of the inode core that is logged. This structure must be
+22 −8
Original line number Diff line number Diff line
@@ -295,6 +295,24 @@ xfs_inode_item_format_attr_fork(
	}
}

/*
 * Convert an incore timestamp to a log timestamp.  Note that the log format
 * specifies host endian format!
 */
static inline xfs_ictimestamp_t
xfs_inode_to_log_dinode_ts(
	const struct timespec64		tv)
{
	struct xfs_legacy_ictimestamp	*lits;
	xfs_ictimestamp_t		its;

	lits = (struct xfs_legacy_ictimestamp *)&its;
	lits->t_sec = tv.tv_sec;
	lits->t_nsec = tv.tv_nsec;

	return its;
}

static void
xfs_inode_to_log_dinode(
	struct xfs_inode	*ip,
@@ -313,12 +331,9 @@ xfs_inode_to_log_dinode(

	memset(to->di_pad, 0, sizeof(to->di_pad));
	memset(to->di_pad3, 0, sizeof(to->di_pad3));
	to->di_atime.t_sec = inode->i_atime.tv_sec;
	to->di_atime.t_nsec = inode->i_atime.tv_nsec;
	to->di_mtime.t_sec = inode->i_mtime.tv_sec;
	to->di_mtime.t_nsec = inode->i_mtime.tv_nsec;
	to->di_ctime.t_sec = inode->i_ctime.tv_sec;
	to->di_ctime.t_nsec = inode->i_ctime.tv_nsec;
	to->di_atime = xfs_inode_to_log_dinode_ts(inode->i_atime);
	to->di_mtime = xfs_inode_to_log_dinode_ts(inode->i_mtime);
	to->di_ctime = xfs_inode_to_log_dinode_ts(inode->i_ctime);
	to->di_nlink = inode->i_nlink;
	to->di_gen = inode->i_generation;
	to->di_mode = inode->i_mode;
@@ -340,8 +355,7 @@ xfs_inode_to_log_dinode(
	if (xfs_sb_version_has_v3inode(&ip->i_mount->m_sb)) {
		to->di_version = 3;
		to->di_changecount = inode_peek_iversion(inode);
		to->di_crtime.t_sec = from->di_crtime.tv_sec;
		to->di_crtime.t_nsec = from->di_crtime.tv_nsec;
		to->di_crtime = xfs_inode_to_log_dinode_ts(from->di_crtime);
		to->di_flags2 = from->di_flags2;
		to->di_cowextsize = from->di_cowextsize;
		to->di_ino = ip->i_ino;
+4 −2
Original line number Diff line number Diff line
@@ -121,11 +121,13 @@ xfs_log_dinode_to_disk_ts(
	const xfs_ictimestamp_t		its)
{
	struct xfs_legacy_timestamp	*lts;
	struct xfs_legacy_ictimestamp	*lits;
	xfs_timestamp_t			ts;

	lts = (struct xfs_legacy_timestamp *)&ts;
	lts->t_sec = cpu_to_be32(its.t_sec);
	lts->t_nsec = cpu_to_be32(its.t_nsec);
	lits = (struct xfs_legacy_ictimestamp *)&its;
	lts->t_sec = cpu_to_be32(lits->t_sec);
	lts->t_nsec = cpu_to_be32(lits->t_nsec);

	return ts;
}
+2 −1
Original line number Diff line number Diff line
@@ -122,7 +122,8 @@ xfs_check_ondisk_structs(void)
	XFS_CHECK_STRUCT_SIZE(struct xfs_extent_64,		16);
	XFS_CHECK_STRUCT_SIZE(struct xfs_log_dinode,		176);
	XFS_CHECK_STRUCT_SIZE(struct xfs_icreate_log,		28);
	XFS_CHECK_STRUCT_SIZE(struct xfs_ictimestamp,		8);
	XFS_CHECK_STRUCT_SIZE(xfs_ictimestamp_t,		8);
	XFS_CHECK_STRUCT_SIZE(struct xfs_legacy_ictimestamp,	8);
	XFS_CHECK_STRUCT_SIZE(struct xfs_inode_log_format_32,	52);
	XFS_CHECK_STRUCT_SIZE(struct xfs_inode_log_format,	56);
	XFS_CHECK_STRUCT_SIZE(struct xfs_qoff_logformat,	20);