xfs: move the di_flushiter field to struct xfs_inode
authorChristoph Hellwig <hch@lst.de>
Mon, 29 Mar 2021 18:11:42 +0000 (11:11 -0700)
committerDarrick J. Wong <djwong@kernel.org>
Wed, 7 Apr 2021 21:37:04 +0000 (14:37 -0700)
In preparation of removing the historic icinode struct, move the
flushiter field into the containing xfs_inode structure.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Darrick J. Wong <djwong@kernel.org>
Signed-off-by: Darrick J. Wong <djwong@kernel.org>
fs/xfs/libxfs/xfs_inode_buf.c
fs/xfs/libxfs/xfs_inode_buf.h
fs/xfs/xfs_icache.c
fs/xfs/xfs_inode.c
fs/xfs/xfs_inode.h
fs/xfs/xfs_inode_item.c

index 2656acbb95e6081f98d7f63b095c9de4b089938b..3c7eb01c66ace4be3df0e1c5da510d1e0c3720ad 100644 (file)
@@ -193,7 +193,7 @@ xfs_inode_from_disk(
         * inode. If the inode is unused, mode is zero and we shouldn't mess
         * with the uninitialized part of it.
         */
-       to->di_flushiter = be16_to_cpu(from->di_flushiter);
+       ip->i_flushiter = be16_to_cpu(from->di_flushiter);
        inode->i_generation = be32_to_cpu(from->di_gen);
        inode->i_mode = be16_to_cpu(from->di_mode);
        if (!inode->i_mode)
@@ -327,7 +327,7 @@ xfs_inode_to_disk(
                to->di_flushiter = 0;
        } else {
                to->di_version = 2;
-               to->di_flushiter = cpu_to_be16(from->di_flushiter);
+               to->di_flushiter = cpu_to_be16(ip->i_flushiter);
        }
 }
 
index 77d250dbe9684813ae00bba12b477588d2f6a041..e41a11bef044369a22bd04334d0a01ab15a64422 100644 (file)
@@ -16,7 +16,6 @@ struct xfs_dinode;
  * format specific structures at the appropriate time.
  */
 struct xfs_icdinode {
-       uint16_t        di_flushiter;   /* incremented on flush */
        uint8_t         di_forkoff;     /* attr fork offs, <<3 for 64b align */
        uint16_t        di_flags;       /* random flags, XFS_DIFLAG_... */
 
index 354ae973000305ed62d5c21b57cd52563eebe95f..afb705d1aef54e3512332034f912b7543693ee46 100644 (file)
@@ -499,7 +499,7 @@ xfs_iget_cache_miss(
         * simply build the new inode core with a random generation number.
         *
         * For version 4 (and older) superblocks, log recovery is dependent on
-        * the di_flushiter field being initialised from the current on-disk
+        * the i_flushiter field being initialised from the current on-disk
         * value and hence we must also read the inode off disk even when
         * initializing new inodes.
         */
index cfd589c64ad9c395f7e4c1c785dc2ffd6ad970a9..06d779c9334b808f8643035c68ac2c6bf84c7ab7 100644 (file)
@@ -3454,16 +3454,15 @@ xfs_iflush(
        }
 
        /*
-        * Inode item log recovery for v2 inodes are dependent on the
-        * di_flushiter count for correct sequencing. We bump the flush
-        * iteration count so we can detect flushes which postdate a log record
-        * during recovery. This is redundant as we now log every change and
-        * hence this can't happen but we need to still do it to ensure
-        * backwards compatibility with old kernels that predate logging all
-        * inode changes.
+        * Inode item log recovery for v2 inodes are dependent on the flushiter
+        * count for correct sequencing.  We bump the flush iteration count so
+        * we can detect flushes which postdate a log record during recovery.
+        * This is redundant as we now log every change and hence this can't
+        * happen but we need to still do it to ensure backwards compatibility
+        * with old kernels that predate logging all inode changes.
         */
        if (!xfs_sb_version_has_v3inode(&mp->m_sb))
-               ip->i_d.di_flushiter++;
+               ip->i_flushiter++;
 
        /*
         * If there are inline format data / attr forks attached to this inode,
@@ -3484,8 +3483,8 @@ xfs_iflush(
        xfs_inode_to_disk(ip, dip, iip->ili_item.li_lsn);
 
        /* Wrap, we never let the log put out DI_MAX_FLUSH */
-       if (ip->i_d.di_flushiter == DI_MAX_FLUSH)
-               ip->i_d.di_flushiter = 0;
+       if (ip->i_flushiter == DI_MAX_FLUSH)
+               ip->i_flushiter = 0;
 
        xfs_iflush_fork(ip, dip, iip, XFS_DATA_FORK);
        if (XFS_IFORK_Q(ip))
index 0ca1d4dd90b5f33978342c2807f51975029e82d7..a76ca913f7698ce88e1a4367bcc98f1933e153fb 100644 (file)
@@ -59,6 +59,7 @@ typedef struct xfs_inode {
        prid_t                  i_projid;       /* owner's project id */
        xfs_extlen_t            i_extsize;      /* basic/minimum extent size */
        xfs_extlen_t            i_cowextsize;   /* basic cow extent size */
+       uint16_t                i_flushiter;    /* incremented on flush */
 
        struct xfs_icdinode     i_d;            /* most of ondisk inode */
 
index ebb2ce03f8e04caf685443d43e83babfb6572793..b5fbff17e9e4dd0ed3f57d24130cc03e183fe7f2 100644 (file)
@@ -396,7 +396,7 @@ xfs_inode_to_log_dinode(
                to->di_flushiter = 0;
        } else {
                to->di_version = 2;
-               to->di_flushiter = from->di_flushiter;
+               to->di_flushiter = ip->i_flushiter;
        }
 }