]> git.ipfire.org Git - thirdparty/xfsprogs-dev.git/commitdiff
xfs: move the di_forkoff field to struct xfs_inode
authorChristoph Hellwig <hch@lst.de>
Wed, 30 Jun 2021 22:34:59 +0000 (18:34 -0400)
committerEric Sandeen <sandeen@sandeen.net>
Wed, 30 Jun 2021 22:34:59 +0000 (18:34 -0400)
Source kernel commit: 7821ea302dca72469c558e382d6e4ae09232b7a7

In preparation of removing the historic icinode struct, move the
forkoff 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>
Signed-off-by: Eric Sandeen <sandeen@sandeen.net>
include/xfs_inode.h
libxfs/util.c
libxfs/xfs_attr_leaf.c
libxfs/xfs_bmap.c
libxfs/xfs_inode_buf.c
libxfs/xfs_inode_buf.h
libxfs/xfs_inode_fork.h
repair/phase6.c

index 9c3d296b93f9ee4d8264c63890e0ed7030d66047..ef9700677f1a3c5ab043b37f6af32295bcef30ea 100644 (file)
@@ -87,6 +87,7 @@ typedef struct xfs_inode {
                xfs_extlen_t    i_cowextsize;   /* basic cow extent size */
                uint16_t        i_flushiter;    /* incremented on flush */
        };
+       uint8_t                 i_forkoff;      /* attr fork offset >> 3 */
        struct xfs_icdinode     i_d;            /* most of ondisk inode */
 
        xfs_extnum_t            i_cnextents;    /* # of extents in cow fork */
index e401a1a546861149e5a3e26b9602e88d9bafd7d9..1546541cf290cc8a2698cc90f392acfab7638c91 100644 (file)
@@ -361,7 +361,7 @@ libxfs_iflush_int(
                        (ip->i_df.if_format == XFS_DINODE_FMT_LOCAL) );
        }
        ASSERT(ip->i_df.if_nextents+ip->i_afp->if_nextents <= ip->i_nblocks);
-       ASSERT(ip->i_d.di_forkoff <= mp->m_sb.sb_inodesize);
+       ASSERT(ip->i_forkoff <= mp->m_sb.sb_inodesize);
 
        /* bump the change count on v3 inodes */
        if (xfs_sb_version_has_v3inode(&mp->m_sb))
index a59660f23a0e6517b017349e0421e00c40a1b0b7..e3fa63d6786be6bb011a754ca966790aa668d86d 100644 (file)
@@ -515,10 +515,10 @@ xfs_attr_copy_value(
  * Query whether the total requested number of attr fork bytes of extended
  * attribute space will be able to fit inline.
  *
- * Returns zero if not, else the di_forkoff fork offset to be used in the
+ * Returns zero if not, else the i_forkoff fork offset to be used in the
  * literal area for attribute data once the new bytes have been added.
  *
- * di_forkoff must be 8 byte aligned, hence is stored as a >>3 value;
+ * i_forkoff must be 8 byte aligned, hence is stored as a >>3 value;
  * special case for dev/uuid inodes, they have fixed size data forks.
  */
 int
@@ -557,7 +557,7 @@ xfs_attr_shortform_bytesfit(
         * literal area rebalancing.
         */
        if (bytes <= XFS_IFORK_ASIZE(dp))
-               return dp->i_d.di_forkoff;
+               return dp->i_forkoff;
 
        /*
         * For attr2 we can try to move the forkoff if there is space in the
@@ -578,7 +578,7 @@ xfs_attr_shortform_bytesfit(
                 * minimum offset only needs to be the space required for
                 * the btree root.
                 */
-               if (!dp->i_d.di_forkoff && dp->i_df.if_bytes >
+               if (!dp->i_forkoff && dp->i_df.if_bytes >
                    xfs_default_attroffset(dp))
                        dsize = XFS_BMDR_SPACE_CALC(MINDBTPTRS);
                break;
@@ -589,10 +589,10 @@ xfs_attr_shortform_bytesfit(
                 * minforkoff to where the btree root can finish so we have
                 * plenty of room for attrs
                 */
-               if (dp->i_d.di_forkoff) {
-                       if (offset < dp->i_d.di_forkoff)
+               if (dp->i_forkoff) {
+                       if (offset < dp->i_forkoff)
                                return 0;
-                       return dp->i_d.di_forkoff;
+                       return dp->i_forkoff;
                }
                dsize = XFS_BMAP_BROOT_SPACE(mp, dp->i_df.if_broot);
                break;
@@ -727,7 +727,7 @@ xfs_attr_shortform_add(
 
        dp = args->dp;
        mp = dp->i_mount;
-       dp->i_d.di_forkoff = forkoff;
+       dp->i_forkoff = forkoff;
 
        ifp = dp->i_afp;
        ASSERT(ifp->if_flags & XFS_IFINLINE);
@@ -767,7 +767,7 @@ xfs_attr_fork_remove(
        xfs_idestroy_fork(ip->i_afp);
        kmem_cache_free(xfs_ifork_zone, ip->i_afp);
        ip->i_afp = NULL;
-       ip->i_d.di_forkoff = 0;
+       ip->i_forkoff = 0;
        xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE);
 }
 
@@ -818,8 +818,8 @@ xfs_attr_shortform_remove(
                xfs_attr_fork_remove(dp, args->trans);
        } else {
                xfs_idata_realloc(dp, -size, XFS_ATTR_FORK);
-               dp->i_d.di_forkoff = xfs_attr_shortform_bytesfit(dp, totsize);
-               ASSERT(dp->i_d.di_forkoff);
+               dp->i_forkoff = xfs_attr_shortform_bytesfit(dp, totsize);
+               ASSERT(dp->i_forkoff);
                ASSERT(totsize > sizeof(xfs_attr_sf_hdr_t) ||
                                (args->op_flags & XFS_DA_OP_ADDNAME) ||
                                !(mp->m_flags & XFS_MOUNT_ATTR2) ||
index 8cdf208d30aa04a5a1ab06e7541846b0ac38f743..1de735505daf46260c94aa9983d93d77f307e442 100644 (file)
@@ -59,13 +59,13 @@ xfs_bmap_compute_maxlevels(
         * either a signed 32-bit number for the data fork, or a signed 16-bit
         * number for the attr fork.
         *
-        * Note that we can no longer assume that if we are in ATTR1 that
-        * the fork offset of all the inodes will be
-        * (xfs_default_attroffset(ip) >> 3) because we could have mounted
-        * with ATTR2 and then mounted back with ATTR1, keeping the
-        * di_forkoff's fixed but probably at various positions. Therefore,
-        * for both ATTR1 and ATTR2 we have to assume the worst case scenario
-        * of a minimum size available.
+        * Note that we can no longer assume that if we are in ATTR1 that the
+        * fork offset of all the inodes will be
+        * (xfs_default_attroffset(ip) >> 3) because we could have mounted with
+        * ATTR2 and then mounted back with ATTR1, keeping the i_forkoff's fixed
+        * but probably at various positions. Therefore, for both ATTR1 and
+        * ATTR2 we have to assume the worst case scenario of a minimum size
+        * available.
         */
        if (whichfork == XFS_DATA_FORK) {
                maxleafents = MAXEXTNUM;
@@ -198,9 +198,9 @@ xfs_default_attroffset(
 }
 
 /*
- * Helper routine to reset inode di_forkoff field when switching
- * attribute fork from local to extent format - we reset it where
- * possible to make space available for inline data fork extents.
+ * Helper routine to reset inode i_forkoff field when switching attribute fork
+ * from local to extent format - we reset it where possible to make space
+ * available for inline data fork extents.
  */
 STATIC void
 xfs_bmap_forkoff_reset(
@@ -212,8 +212,8 @@ xfs_bmap_forkoff_reset(
            ip->i_df.if_format != XFS_DINODE_FMT_BTREE) {
                uint    dfl_forkoff = xfs_default_attroffset(ip) >> 3;
 
-               if (dfl_forkoff > ip->i_d.di_forkoff)
-                       ip->i_d.di_forkoff = dfl_forkoff;
+               if (dfl_forkoff > ip->i_forkoff)
+                       ip->i_forkoff = dfl_forkoff;
        }
 }
 
@@ -1031,14 +1031,14 @@ xfs_bmap_set_attrforkoff(
 {
        switch (ip->i_df.if_format) {
        case XFS_DINODE_FMT_DEV:
-               ip->i_d.di_forkoff = roundup(sizeof(xfs_dev_t), 8) >> 3;
+               ip->i_forkoff = roundup(sizeof(xfs_dev_t), 8) >> 3;
                break;
        case XFS_DINODE_FMT_LOCAL:
        case XFS_DINODE_FMT_EXTENTS:
        case XFS_DINODE_FMT_BTREE:
-               ip->i_d.di_forkoff = xfs_attr_shortform_bytesfit(ip, size);
-               if (!ip->i_d.di_forkoff)
-                       ip->i_d.di_forkoff = xfs_default_attroffset(ip) >> 3;
+               ip->i_forkoff = xfs_attr_shortform_bytesfit(ip, size);
+               if (!ip->i_forkoff)
+                       ip->i_forkoff = xfs_default_attroffset(ip) >> 3;
                else if ((ip->i_mount->m_flags & XFS_MOUNT_ATTR2) && version)
                        *version = 2;
                break;
index d1937384ba1b299d9e99d98476952611c90a3318..51f3ccf0c41847a2cf8615d8b20092cbfe27181c 100644 (file)
@@ -227,7 +227,7 @@ xfs_inode_from_disk(
        ip->i_disk_size = be64_to_cpu(from->di_size);
        ip->i_nblocks = be64_to_cpu(from->di_nblocks);
        ip->i_extsize = be32_to_cpu(from->di_extsize);
-       to->di_forkoff = from->di_forkoff;
+       ip->i_forkoff = from->di_forkoff;
        to->di_flags    = be16_to_cpu(from->di_flags);
 
        if (from->di_dmevmask || from->di_dmstate)
@@ -308,7 +308,7 @@ xfs_inode_to_disk(
        to->di_extsize = cpu_to_be32(ip->i_extsize);
        to->di_nextents = cpu_to_be32(xfs_ifork_nextents(&ip->i_df));
        to->di_anextents = cpu_to_be16(xfs_ifork_nextents(ip->i_afp));
-       to->di_forkoff = from->di_forkoff;
+       to->di_forkoff = ip->i_forkoff;
        to->di_aformat = xfs_ifork_format(ip->i_afp);
        to->di_flags = cpu_to_be16(from->di_flags);
 
index e41a11bef044369a22bd04334d0a01ab15a64422..39f4ad4419fe418b7b0fda5fdf0bbdb5fd86a315 100644 (file)
@@ -16,7 +16,6 @@ struct xfs_dinode;
  * format specific structures at the appropriate time.
  */
 struct xfs_icdinode {
-       uint8_t         di_forkoff;     /* attr fork offs, <<3 for 64b align */
        uint16_t        di_flags;       /* random flags, XFS_DIFLAG_... */
 
        uint64_t        di_flags2;      /* more random flags */
index a0717ab0e5c574422fe800d7480ff7c555b21041..06682ff49a5bfcc1db066a33530131779622ccb0 100644 (file)
@@ -99,8 +99,8 @@ struct xfs_ifork {
  * Fork handling.
  */
 
-#define XFS_IFORK_Q(ip)                        ((ip)->i_d.di_forkoff != 0)
-#define XFS_IFORK_BOFF(ip)             ((int)((ip)->i_d.di_forkoff << 3))
+#define XFS_IFORK_Q(ip)                        ((ip)->i_forkoff != 0)
+#define XFS_IFORK_BOFF(ip)             ((int)((ip)->i_forkoff << 3))
 
 #define XFS_IFORK_PTR(ip,w)            \
        ((w) == XFS_DATA_FORK ? \
index 252cd24aa4eed7f904ab205b22eac1263be0ad7b..be77fa020c08804943ecdbc5d1feb1502836f7e6 100644 (file)
@@ -447,6 +447,7 @@ reset_inode_fields(struct xfs_inode *ip)
        ip->i_extsize = 0;
        ip->i_cowextsize = 0;
        ip->i_flushiter = 0;
+       ip->i_forkoff = 0;
 }
 
 static void