xfs: remove timestamps from incore inode
The struct xfs_inode has two copies of the current timestamps in it, one in the vfs inode and one in the struct xfs_icdinode. Now that we no longer log the struct xfs_icdinode directly, we don't need to keep the timestamps in this structure. instead we can copy them straight out of the VFS inode when formatting the inode log item or the on-disk inode. This reduces the struct xfs_inode in size by 24 bytes. Signed-off-by: Dave Chinner <dchinner@redhat.com> Reviewed-by: Brian Foster <bfoster@redhat.com> Reviewed-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Dave Chinner <david@fromorbit.com>
This commit is contained in:

committed by
Dave Chinner

parent
f8d55aa052
commit
3987848c7c
@@ -195,10 +195,13 @@ xfs_imap_to_bp(
|
||||
}
|
||||
|
||||
void
|
||||
xfs_dinode_from_disk(
|
||||
struct xfs_icdinode *to,
|
||||
xfs_inode_from_disk(
|
||||
struct xfs_inode *ip,
|
||||
struct xfs_dinode *from)
|
||||
{
|
||||
struct xfs_icdinode *to = &ip->i_d;
|
||||
struct inode *inode = VFS_I(ip);
|
||||
|
||||
to->di_magic = be16_to_cpu(from->di_magic);
|
||||
to->di_mode = be16_to_cpu(from->di_mode);
|
||||
to->di_version = from ->di_version;
|
||||
@@ -211,12 +214,20 @@ xfs_dinode_from_disk(
|
||||
to->di_projid_hi = be16_to_cpu(from->di_projid_hi);
|
||||
memcpy(to->di_pad, from->di_pad, sizeof(to->di_pad));
|
||||
to->di_flushiter = be16_to_cpu(from->di_flushiter);
|
||||
to->di_atime.t_sec = be32_to_cpu(from->di_atime.t_sec);
|
||||
to->di_atime.t_nsec = be32_to_cpu(from->di_atime.t_nsec);
|
||||
to->di_mtime.t_sec = be32_to_cpu(from->di_mtime.t_sec);
|
||||
to->di_mtime.t_nsec = be32_to_cpu(from->di_mtime.t_nsec);
|
||||
to->di_ctime.t_sec = be32_to_cpu(from->di_ctime.t_sec);
|
||||
to->di_ctime.t_nsec = be32_to_cpu(from->di_ctime.t_nsec);
|
||||
|
||||
/*
|
||||
* Time is signed, so need to convert to signed 32 bit before
|
||||
* storing in inode timestamp which may be 64 bit. Otherwise
|
||||
* a time before epoch is converted to a time long after epoch
|
||||
* on 64 bit systems.
|
||||
*/
|
||||
inode->i_atime.tv_sec = (int)be32_to_cpu(from->di_atime.t_sec);
|
||||
inode->i_atime.tv_nsec = (int)be32_to_cpu(from->di_atime.t_nsec);
|
||||
inode->i_mtime.tv_sec = (int)be32_to_cpu(from->di_mtime.t_sec);
|
||||
inode->i_mtime.tv_nsec = (int)be32_to_cpu(from->di_mtime.t_nsec);
|
||||
inode->i_ctime.tv_sec = (int)be32_to_cpu(from->di_ctime.t_sec);
|
||||
inode->i_ctime.tv_nsec = (int)be32_to_cpu(from->di_ctime.t_nsec);
|
||||
|
||||
to->di_size = be64_to_cpu(from->di_size);
|
||||
to->di_nblocks = be64_to_cpu(from->di_nblocks);
|
||||
to->di_extsize = be32_to_cpu(from->di_extsize);
|
||||
@@ -242,9 +253,63 @@ xfs_dinode_from_disk(
|
||||
}
|
||||
|
||||
void
|
||||
xfs_dinode_to_disk(
|
||||
struct xfs_dinode *to,
|
||||
struct xfs_icdinode *from)
|
||||
xfs_inode_to_disk(
|
||||
struct xfs_inode *ip,
|
||||
struct xfs_dinode *to)
|
||||
{
|
||||
struct xfs_icdinode *from = &ip->i_d;
|
||||
struct inode *inode = VFS_I(ip);
|
||||
|
||||
to->di_magic = cpu_to_be16(from->di_magic);
|
||||
to->di_mode = cpu_to_be16(from->di_mode);
|
||||
to->di_version = from ->di_version;
|
||||
to->di_format = from->di_format;
|
||||
to->di_onlink = cpu_to_be16(from->di_onlink);
|
||||
to->di_uid = cpu_to_be32(from->di_uid);
|
||||
to->di_gid = cpu_to_be32(from->di_gid);
|
||||
to->di_nlink = cpu_to_be32(from->di_nlink);
|
||||
to->di_projid_lo = cpu_to_be16(from->di_projid_lo);
|
||||
to->di_projid_hi = cpu_to_be16(from->di_projid_hi);
|
||||
memcpy(to->di_pad, from->di_pad, sizeof(to->di_pad));
|
||||
|
||||
to->di_atime.t_sec = cpu_to_be32(inode->i_atime.tv_sec);
|
||||
to->di_atime.t_nsec = cpu_to_be32(inode->i_atime.tv_nsec);
|
||||
to->di_mtime.t_sec = cpu_to_be32(inode->i_mtime.tv_sec);
|
||||
to->di_mtime.t_nsec = cpu_to_be32(inode->i_mtime.tv_nsec);
|
||||
to->di_ctime.t_sec = cpu_to_be32(inode->i_ctime.tv_sec);
|
||||
to->di_ctime.t_nsec = cpu_to_be32(inode->i_ctime.tv_nsec);
|
||||
|
||||
to->di_size = cpu_to_be64(from->di_size);
|
||||
to->di_nblocks = cpu_to_be64(from->di_nblocks);
|
||||
to->di_extsize = cpu_to_be32(from->di_extsize);
|
||||
to->di_nextents = cpu_to_be32(from->di_nextents);
|
||||
to->di_anextents = cpu_to_be16(from->di_anextents);
|
||||
to->di_forkoff = from->di_forkoff;
|
||||
to->di_aformat = from->di_aformat;
|
||||
to->di_dmevmask = cpu_to_be32(from->di_dmevmask);
|
||||
to->di_dmstate = cpu_to_be16(from->di_dmstate);
|
||||
to->di_flags = cpu_to_be16(from->di_flags);
|
||||
to->di_gen = cpu_to_be32(from->di_gen);
|
||||
|
||||
if (from->di_version == 3) {
|
||||
to->di_changecount = cpu_to_be64(from->di_changecount);
|
||||
to->di_crtime.t_sec = cpu_to_be32(from->di_crtime.t_sec);
|
||||
to->di_crtime.t_nsec = cpu_to_be32(from->di_crtime.t_nsec);
|
||||
to->di_flags2 = cpu_to_be64(from->di_flags2);
|
||||
to->di_ino = cpu_to_be64(from->di_ino);
|
||||
to->di_lsn = cpu_to_be64(from->di_lsn);
|
||||
memcpy(to->di_pad2, from->di_pad2, sizeof(to->di_pad2));
|
||||
uuid_copy(&to->di_uuid, &from->di_uuid);
|
||||
to->di_flushiter = 0;
|
||||
} else {
|
||||
to->di_flushiter = cpu_to_be16(from->di_flushiter);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
xfs_log_dinode_to_disk(
|
||||
struct xfs_log_dinode *from,
|
||||
struct xfs_dinode *to)
|
||||
{
|
||||
to->di_magic = cpu_to_be16(from->di_magic);
|
||||
to->di_mode = cpu_to_be16(from->di_mode);
|
||||
@@ -257,12 +322,14 @@ xfs_dinode_to_disk(
|
||||
to->di_projid_lo = cpu_to_be16(from->di_projid_lo);
|
||||
to->di_projid_hi = cpu_to_be16(from->di_projid_hi);
|
||||
memcpy(to->di_pad, from->di_pad, sizeof(to->di_pad));
|
||||
|
||||
to->di_atime.t_sec = cpu_to_be32(from->di_atime.t_sec);
|
||||
to->di_atime.t_nsec = cpu_to_be32(from->di_atime.t_nsec);
|
||||
to->di_mtime.t_sec = cpu_to_be32(from->di_mtime.t_sec);
|
||||
to->di_mtime.t_nsec = cpu_to_be32(from->di_mtime.t_nsec);
|
||||
to->di_ctime.t_sec = cpu_to_be32(from->di_ctime.t_sec);
|
||||
to->di_ctime.t_nsec = cpu_to_be32(from->di_ctime.t_nsec);
|
||||
|
||||
to->di_size = cpu_to_be64(from->di_size);
|
||||
to->di_nblocks = cpu_to_be64(from->di_nblocks);
|
||||
to->di_extsize = cpu_to_be32(from->di_extsize);
|
||||
@@ -403,7 +470,7 @@ xfs_iread(
|
||||
* Otherwise, just get the truly permanent information.
|
||||
*/
|
||||
if (dip->di_mode) {
|
||||
xfs_dinode_from_disk(&ip->i_d, dip);
|
||||
xfs_inode_from_disk(ip, dip);
|
||||
error = xfs_iformat_fork(ip, dip);
|
||||
if (error) {
|
||||
#ifdef DEBUG
|
||||
|
Reference in New Issue
Block a user