mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-23 20:53:53 +08:00
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: Darrick J. Wong <darrick.wong@oracle.com> Reviewed-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Gao Xiang <hsiangkao@redhat.com> Reviewed-by: Dave Chinner <dchinner@redhat.com>
This commit is contained in:
parent
5a0bb066f6
commit
30e0559921
@ -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
|
* directly mirrors the xfs_dinode structure as it must contain all the same
|
||||||
* information.
|
* 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_sec; /* timestamp seconds */
|
||||||
int32_t t_nsec; /* timestamp nanoseconds */
|
int32_t t_nsec; /* timestamp nanoseconds */
|
||||||
} xfs_ictimestamp_t;
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Define the format of the inode core that is logged. This structure must be
|
* Define the format of the inode core that is logged. This structure must be
|
||||||
|
@ -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
|
static void
|
||||||
xfs_inode_to_log_dinode(
|
xfs_inode_to_log_dinode(
|
||||||
struct xfs_inode *ip,
|
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_pad, 0, sizeof(to->di_pad));
|
||||||
memset(to->di_pad3, 0, sizeof(to->di_pad3));
|
memset(to->di_pad3, 0, sizeof(to->di_pad3));
|
||||||
to->di_atime.t_sec = inode->i_atime.tv_sec;
|
to->di_atime = xfs_inode_to_log_dinode_ts(inode->i_atime);
|
||||||
to->di_atime.t_nsec = inode->i_atime.tv_nsec;
|
to->di_mtime = xfs_inode_to_log_dinode_ts(inode->i_mtime);
|
||||||
to->di_mtime.t_sec = inode->i_mtime.tv_sec;
|
to->di_ctime = xfs_inode_to_log_dinode_ts(inode->i_ctime);
|
||||||
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_nlink = inode->i_nlink;
|
to->di_nlink = inode->i_nlink;
|
||||||
to->di_gen = inode->i_generation;
|
to->di_gen = inode->i_generation;
|
||||||
to->di_mode = inode->i_mode;
|
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)) {
|
if (xfs_sb_version_has_v3inode(&ip->i_mount->m_sb)) {
|
||||||
to->di_version = 3;
|
to->di_version = 3;
|
||||||
to->di_changecount = inode_peek_iversion(inode);
|
to->di_changecount = inode_peek_iversion(inode);
|
||||||
to->di_crtime.t_sec = from->di_crtime.tv_sec;
|
to->di_crtime = xfs_inode_to_log_dinode_ts(from->di_crtime);
|
||||||
to->di_crtime.t_nsec = from->di_crtime.tv_nsec;
|
|
||||||
to->di_flags2 = from->di_flags2;
|
to->di_flags2 = from->di_flags2;
|
||||||
to->di_cowextsize = from->di_cowextsize;
|
to->di_cowextsize = from->di_cowextsize;
|
||||||
to->di_ino = ip->i_ino;
|
to->di_ino = ip->i_ino;
|
||||||
|
@ -121,11 +121,13 @@ xfs_log_dinode_to_disk_ts(
|
|||||||
const xfs_ictimestamp_t its)
|
const xfs_ictimestamp_t its)
|
||||||
{
|
{
|
||||||
struct xfs_legacy_timestamp *lts;
|
struct xfs_legacy_timestamp *lts;
|
||||||
|
struct xfs_legacy_ictimestamp *lits;
|
||||||
xfs_timestamp_t ts;
|
xfs_timestamp_t ts;
|
||||||
|
|
||||||
lts = (struct xfs_legacy_timestamp *)&ts;
|
lts = (struct xfs_legacy_timestamp *)&ts;
|
||||||
lts->t_sec = cpu_to_be32(its.t_sec);
|
lits = (struct xfs_legacy_ictimestamp *)&its;
|
||||||
lts->t_nsec = cpu_to_be32(its.t_nsec);
|
lts->t_sec = cpu_to_be32(lits->t_sec);
|
||||||
|
lts->t_nsec = cpu_to_be32(lits->t_nsec);
|
||||||
|
|
||||||
return ts;
|
return ts;
|
||||||
}
|
}
|
||||||
|
@ -122,7 +122,8 @@ xfs_check_ondisk_structs(void)
|
|||||||
XFS_CHECK_STRUCT_SIZE(struct xfs_extent_64, 16);
|
XFS_CHECK_STRUCT_SIZE(struct xfs_extent_64, 16);
|
||||||
XFS_CHECK_STRUCT_SIZE(struct xfs_log_dinode, 176);
|
XFS_CHECK_STRUCT_SIZE(struct xfs_log_dinode, 176);
|
||||||
XFS_CHECK_STRUCT_SIZE(struct xfs_icreate_log, 28);
|
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_32, 52);
|
||||||
XFS_CHECK_STRUCT_SIZE(struct xfs_inode_log_format, 56);
|
XFS_CHECK_STRUCT_SIZE(struct xfs_inode_log_format, 56);
|
||||||
XFS_CHECK_STRUCT_SIZE(struct xfs_qoff_logformat, 20);
|
XFS_CHECK_STRUCT_SIZE(struct xfs_qoff_logformat, 20);
|
||||||
|
Loading…
Reference in New Issue
Block a user