Re: [PATCH V7 06/17] xfs: Promote xfs_extnum_t and xfs_aextnum_t to 64 and 32-bits respectively

Dave Chinner
2022-03-04T01:29:57Z

On Tue, Mar 01, 2022 at 04:09:27PM +0530, Chandan Babu R wrote:
> 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.
>
> Reported-by: kernel test robot <lkp@intel.com>

What was reported by the test robot? This change isn't a bug that
needed fixing, it's a core part of the patchset...

> Reviewed-by: Darrick J. Wong <djwong@kernel.org>
> Signed-off-by: Chandan Babu R <chandan.babu@oracle.com>
> ---
> fs/xfs/libxfs/xfs_bmap.c | 6 +++---
> fs/xfs/libxfs/xfs_inode_fork.c | 2 +-
> fs/xfs/libxfs/xfs_inode_fork.h | 2 +-
> fs/xfs/libxfs/xfs_types.h | 4 ++--
> fs/xfs/xfs_inode.c | 4 ++--
> fs/xfs/xfs_trace.h | 2 +-
> 6 files changed, 10 insertions(+), 10 deletions(-)
>
> diff --git a/fs/xfs/libxfs/xfs_bmap.c b/fs/xfs/libxfs/xfs_bmap.c
> index 98541be873d8..9df98339a43a 100644
> --- a/fs/xfs/libxfs/xfs_bmap.c
> +++ b/fs/xfs/libxfs/xfs_bmap.c
> @@ -52,9 +52,9 @@ xfs_bmap_compute_maxlevels(
> xfs_mount_t *mp, /* file system mount structure */
> int whichfork) /* data or attr fork */
> {
> + xfs_extnum_t maxleafents; /* max leaf entries possible */
> int level; /* btree level */
> uint maxblocks; /* max blocks at this level */
> - xfs_extnum_t maxleafents; /* max leaf entries possible */
> int maxrootrecs; /* max records in root block */
> int minleafrecs; /* min records in leaf block */
> int minnoderecs; /* min records in node block */

Unnecessary.

> @@ -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 @@ xfs_bmap_check_leaf_extents(
> 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);
> diff --git a/fs/xfs/libxfs/xfs_inode_fork.c b/fs/xfs/libxfs/xfs_inode_fork.c
> index 829739e249b6..ce690abe5dce 100644
> --- a/fs/xfs/libxfs/xfs_inode_fork.c
> +++ b/fs/xfs/libxfs/xfs_inode_fork.c
> @@ -117,7 +117,7 @@ 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).",
> + xfs_warn(ip->i_mount, "corrupt inode %llu ((a)extents = %llu).",
> (unsigned long long) ip->i_ino, nex);

Isn't ip->i_ino explicitly defined as an unsigned long long? If you are going
to fix one part of the printk formatting for ip->i_ino, you should
probably should get rid of the unnecessary cast, too.

Otherwise looks OK.

-Dave.
--
Dave Chinner
david@fromorbit.com