xfs: remove im_len field in struct xfs_imap

im_len is always set to the same value for a given file system,
which makes it redundant.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Carlos Maiolino <cmaiolino@redhat.com>
Reviewed-by: "Darrick J. Wong" <djwong@kernel.org>
Signed-off-by: Carlos Maiolino <cem@kernel.org>
This commit is contained in:
Christoph Hellwig 2026-06-01 14:43:48 +02:00 committed by Carlos Maiolino
parent 41397e7ca8
commit 33451947c4
7 changed files with 18 additions and 15 deletions

View File

@ -2552,7 +2552,6 @@ xfs_imap(
XFS_INO_TO_OFFSET(mp, ino);
out:
imap->im_blkno = xfs_agbno_to_daddr(pag, cluster_agbno);
imap->im_len = XFS_FSB_TO_BB(mp, M_IGEO(mp)->blocks_per_cluster);
imap->im_boffset = (unsigned short)(offset << mp->m_sb.sb_inodelog);
/*
@ -2561,12 +2560,13 @@ xfs_imap(
* read_buf and panicing when we get an error from the
* driver.
*/
if ((imap->im_blkno + imap->im_len) >
if (imap->im_blkno +
XFS_FSB_TO_BB(mp, M_IGEO(mp)->blocks_per_cluster) >
XFS_FSB_TO_BB(mp, mp->m_sb.sb_dblocks)) {
xfs_alert(mp,
"%s: (im_blkno (0x%llx) + im_len (0x%llx)) > sb_dblocks (0x%llx)",
__func__, (unsigned long long) imap->im_blkno,
(unsigned long long) imap->im_len,
"%s: (im_blkno (0x%llx) + len (0x%x)) > sb_dblocks (0x%llx)",
__func__, imap->im_blkno,
XFS_FSB_TO_BB(mp, M_IGEO(mp)->blocks_per_cluster),
XFS_FSB_TO_BB(mp, mp->m_sb.sb_dblocks));
return -EINVAL;
}

View File

@ -137,7 +137,8 @@ xfs_imap_to_bp(
int error;
error = xfs_trans_read_buf(mp, tp, mp->m_ddev_targp, imap->im_blkno,
imap->im_len, 0, bpp, &xfs_inode_buf_ops);
XFS_FSB_TO_BB(mp, M_IGEO(mp)->blocks_per_cluster),
0, bpp, &xfs_inode_buf_ops);
if (xfs_metadata_is_sick(error))
xfs_agno_mark_sick(mp, xfs_daddr_to_agno(mp, imap->im_blkno),
XFS_SICK_AG_INODES);

View File

@ -15,7 +15,6 @@ struct xfs_dinode;
*/
struct xfs_imap {
xfs_daddr_t im_blkno; /* starting BB of inode chunk */
unsigned short im_len; /* length in BBs of inode chunk */
unsigned short im_boffset; /* inode offset in block in bytes */
};

View File

@ -395,7 +395,6 @@ xchk_iallocbt_check_cluster(
*/
ir_holemask = (irec->ir_holemask & cluster_mask);
imap.im_blkno = xfs_agbno_to_daddr(to_perag(bs->cur->bc_group), agbno);
imap.im_len = XFS_FSB_TO_BB(mp, M_IGEO(mp)->blocks_per_cluster);
imap.im_boffset = XFS_INO_TO_OFFSET(mp, irec->ir_startino) <<
mp->m_sb.sb_inodelog;
@ -406,7 +405,8 @@ xchk_iallocbt_check_cluster(
}
trace_xchk_iallocbt_check_cluster(to_perag(bs->cur->bc_group),
irec->ir_startino, imap.im_blkno, imap.im_len,
irec->ir_startino, imap.im_blkno,
XFS_FSB_TO_BB(mp, M_IGEO(mp)->blocks_per_cluster),
cluster_base, nr_inodes, cluster_mask, ir_holemask,
XFS_INO_TO_OFFSET(mp, irec->ir_startino +
cluster_base));

View File

@ -306,7 +306,6 @@ xrep_ibt_process_cluster(
* either inode btree.
*/
imap.im_blkno = xfs_agbno_to_daddr(sc->sa.pag, cluster_bno);
imap.im_len = XFS_FSB_TO_BB(mp, igeo->blocks_per_cluster);
imap.im_boffset = 0;
error = xfs_imap_to_bp(mp, sc->tp, &imap, &cluster_bp);
if (error)

View File

@ -1547,6 +1547,7 @@ xrep_dinode_core(
struct xrep_inode *ri)
{
struct xfs_scrub *sc = ri->sc;
struct xfs_mount *mp = sc->mp;
struct xfs_buf *bp;
struct xfs_dinode *dip;
xfs_ino_t ino = sc->sm->sm_ino;
@ -1559,8 +1560,10 @@ xrep_dinode_core(
return error;
/* Read the inode cluster buffer. */
error = xfs_trans_read_buf(sc->mp, sc->tp, sc->mp->m_ddev_targp,
ri->imap.im_blkno, ri->imap.im_len, 0, &bp, NULL);
error = xfs_trans_read_buf(mp, sc->tp, mp->m_ddev_targp,
ri->imap.im_blkno,
XFS_FSB_TO_BB(mp, M_IGEO(mp)->blocks_per_cluster),
0, &bp, NULL);
if (error)
return error;
@ -1583,10 +1586,10 @@ xrep_dinode_core(
write:
/* Write out the inode. */
trace_xrep_dinode_fixed(sc, dip);
xfs_dinode_calc_crc(sc->mp, dip);
xfs_dinode_calc_crc(mp, dip);
xfs_trans_buf_set_type(sc->tp, bp, XFS_BLFT_DINO_BUF);
xfs_trans_log_buf(sc->tp, bp, ri->imap.im_boffset,
ri->imap.im_boffset + sc->mp->m_sb.sb_inodesize - 1);
ri->imap.im_boffset + mp->m_sb.sb_inodesize - 1);
/*
* In theory, we've fixed the ondisk inode record enough that we should

View File

@ -647,13 +647,14 @@ xfs_inode_item_format(
{
struct xfs_inode_log_item *iip = INODE_ITEM(lip);
struct xfs_inode *ip = iip->ili_inode;
struct xfs_mount *mp = ip->i_mount;
struct xfs_inode_log_format *ilf;
ilf = xlog_format_start(lfb, XLOG_REG_TYPE_IFORMAT);
ilf->ilf_type = XFS_LI_INODE;
ilf->ilf_ino = I_INO(ip);
ilf->ilf_blkno = ip->i_imap.im_blkno;
ilf->ilf_len = ip->i_imap.im_len;
ilf->ilf_len = XFS_FSB_TO_BB(mp, M_IGEO(mp)->blocks_per_cluster);
ilf->ilf_boffset = ip->i_imap.im_boffset;
ilf->ilf_fields = XFS_ILOG_CORE;
ilf->ilf_size = 2; /* format + core */