On Wed, Jan 31, 2024 at 11:47:14AM -0800, Darrick J. Wong wrote: > From: Darrick J. Wong <djwong@xxxxxxxxxx> > > While testing a 64k-blocksize filesystem, I noticed that xfs/709 fails > to rebuild the inode btree with a bunch of "Corruption remains" > messages. It turns out that when the inode chunk size is smaller than a > single filesystem block, no block alignments constraints are necessary > for inode chunk allocations, and sb_spino_align is zero. Hence we can > skip the check. Should sparse inodes even be enabled by mkfs in this case? Regardless, if sb_spino_align = 0 then xfs_ialloc_setup_geometry() does: igeo->ialloc_min_blks = igeo->ialloc_blks; And this turns off sparse inode allocation for this situation.... > Fixes: dbfbf3bdf639 ("xfs: repair inode btrees") > Signed-off-by: Darrick J. Wong <djwong@xxxxxxxxxx> > --- > fs/xfs/scrub/ialloc_repair.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/fs/xfs/scrub/ialloc_repair.c b/fs/xfs/scrub/ialloc_repair.c > index b3f7182dd2f5d..e94f108000825 100644 > --- a/fs/xfs/scrub/ialloc_repair.c > +++ b/fs/xfs/scrub/ialloc_repair.c > @@ -369,7 +369,7 @@ xrep_ibt_check_inode_ext( > * On a sparse inode fs, this cluster could be part of a sparse chunk. > * Sparse clusters must be aligned to sparse chunk alignment. > */ > - if (xfs_has_sparseinodes(mp) && > + if (xfs_has_sparseinodes(mp) && mp->m_sb.sb_spino_align && > (!IS_ALIGNED(agbno, mp->m_sb.sb_spino_align) || > !IS_ALIGNED(agbno + len, mp->m_sb.sb_spino_align))) > return -EFSCORRUPTED; ... which makes this additional check reasonable. Reviewed-by: Dave Chinner <dchinner@xxxxxxxxxx> -- Dave Chinner david@xxxxxxxxxxxxx