xfs: Promote xfs_extnum_t and xfs_aextnum_t to 64 and 32-bits respectively
authorChandan Babu R <chandan.babu@oracle.com>
Tue, 16 Nov 2021 07:28:40 +0000 (07:28 +0000)
committerChandan Babu R <chandan.babu@oracle.com>
Mon, 11 Apr 2022 04:11:18 +0000 (04:11 +0000)
A future commit will introduce a 64-bit on-disk data extent counter and a
32-bit on-disk attr extent counter. This commit promotes xfs_extnum_t and
xfs_aextnum_t to 64 and 32-bits in order to correctly handle in-core versions
of these quantities.

Reviewed-by: Darrick J. Wong <djwong@kernel.org>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
Signed-off-by: Chandan Babu R <chandan.babu@oracle.com>
fs/xfs/libxfs/xfs_bmap.c
fs/xfs/libxfs/xfs_inode_fork.c
fs/xfs/libxfs/xfs_inode_fork.h
fs/xfs/libxfs/xfs_types.h
fs/xfs/xfs_inode.c
fs/xfs/xfs_trace.h

index cc15981b17939fd7f22ad1c92b32ff7b86924998..9f38e33d6ce2d14045f7236a11511b7a18cb4194 100644 (file)
@@ -83,7 +83,7 @@ xfs_bmap_compute_maxlevels(
        maxrootrecs = xfs_bmdr_maxrecs(sz, 0);
        minleafrecs = mp->m_bmap_dmnr[0];
        minnoderecs = mp->m_bmap_dmnr[1];
-       maxblocks = (maxleafents + minleafrecs - 1) / minleafrecs;
+       maxblocks = howmany_64(maxleafents, minleafrecs);
        for (level = 1; maxblocks > 1; level++) {
                if (maxblocks <= maxrootrecs)
                        maxblocks = 1;
@@ -467,7 +467,7 @@ error0:
        if (bp_release)
                xfs_trans_brelse(NULL, bp);
 error_norelse:
-       xfs_warn(mp, "%s: BAD after btree leaves for %d extents",
+       xfs_warn(mp, "%s: BAD after btree leaves for %llu extents",
                __func__, i);
        xfs_err(mp, "%s: CORRUPTED BTREE OR SOMETHING", __func__);
        xfs_force_shutdown(mp, SHUTDOWN_CORRUPT_INCORE);
index 1cf48cee45e3477f61c753c24197e2302aa71fbf..004b205d87b83ed7347efe1f0b02bf88d42fa93a 100644 (file)
@@ -117,8 +117,8 @@ xfs_iformat_extents(
         * we just bail out rather than crash in kmem_alloc() or memcpy() below.
         */
        if (unlikely(size < 0 || size > XFS_DFORK_SIZE(dip, mp, whichfork))) {
-               xfs_warn(ip->i_mount, "corrupt inode %Lu ((a)extents = %d).",
-                       (unsigned long long) ip->i_ino, nex);
+               xfs_warn(ip->i_mount, "corrupt inode %llu ((a)extents = %llu).",
+                       ip->i_ino, nex);
                xfs_inode_verifier_error(ip, -EFSCORRUPTED,
                                "xfs_iformat_extents(1)", dip, sizeof(*dip),
                                __this_address);
index 7ed2ecb51bca98ec61e6f264c26e2063b2e0e29a..4a8b77d425df2cbfc877b70ad2301f4d0c876cdb 100644 (file)
@@ -21,9 +21,9 @@ struct xfs_ifork {
                void            *if_root;       /* extent tree root */
                char            *if_data;       /* inline file data */
        } if_u1;
+       xfs_extnum_t            if_nextents;    /* # of extents in this fork */
        short                   if_broot_bytes; /* bytes allocated for root */
        int8_t                  if_format;      /* format of this fork */
-       xfs_extnum_t            if_nextents;    /* # of extents in this fork */
 };
 
 /*
index 794a54cbd0de1dffcfd0279254123d1a90f42823..373f64a492a4feb044a67880aefa26bfad271a27 100644 (file)
@@ -12,8 +12,8 @@ typedef uint32_t      xfs_agblock_t;  /* blockno in alloc. group */
 typedef uint32_t       xfs_agino_t;    /* inode # within allocation grp */
 typedef uint32_t       xfs_extlen_t;   /* extent length in blocks */
 typedef uint32_t       xfs_agnumber_t; /* allocation group number */
-typedef int32_t                xfs_extnum_t;   /* # of extents in a file */
-typedef int16_t                xfs_aextnum_t;  /* # extents in an attribute fork */
+typedef uint64_t       xfs_extnum_t;   /* # of extents in a file */
+typedef uint32_t       xfs_aextnum_t;  /* # extents in an attribute fork */
 typedef int64_t                xfs_fsize_t;    /* bytes in a file */
 typedef uint64_t       xfs_ufsize_t;   /* unsigned bytes in a file */
 
index 9de6205fe134a926838384e1b5a952cbc8ce63f2..adc1355ce8534c9cb1b6cf70bff6e41f62eec21c 100644 (file)
@@ -3515,8 +3515,8 @@ xfs_iflush(
        if (XFS_TEST_ERROR(ip->i_df.if_nextents + xfs_ifork_nextents(ip->i_afp) >
                                ip->i_nblocks, mp, XFS_ERRTAG_IFLUSH_5)) {
                xfs_alert_tag(mp, XFS_PTAG_IFLUSH,
-                       "%s: detected corrupt incore inode %Lu, "
-                       "total extents = %d, nblocks = %Ld, ptr "PTR_FMT,
+                       "%s: detected corrupt incore inode %llu, "
+                       "total extents = %llu nblocks = %lld, ptr "PTR_FMT,
                        __func__, ip->i_ino,
                        ip->i_df.if_nextents + xfs_ifork_nextents(ip->i_afp),
                        ip->i_nblocks, ip);
index 16a91b4f97bd89333b8dc4f27e5425b983846a50..fe6cb295123372232e460546fd2f6c3fc00a0a90 100644 (file)
@@ -2182,7 +2182,7 @@ DECLARE_EVENT_CLASS(xfs_swap_extent_class,
                __entry->broot_size = ip->i_df.if_broot_bytes;
                __entry->fork_off = XFS_IFORK_BOFF(ip);
        ),
-       TP_printk("dev %d:%d ino 0x%llx (%s), %s format, num_extents %d, "
+       TP_printk("dev %d:%d ino 0x%llx (%s), %s format, num_extents %llu, "
                  "broot size %d, forkoff 0x%x",
                  MAJOR(__entry->dev), MINOR(__entry->dev),
                  __entry->ino,