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);
/*
* 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;
}
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);
*/
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 */
};
*/
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;
}
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));
* 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)
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;
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;
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
{
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 */