On Wed, May 01, 2024 at 11:48:59AM +0100, John Garry wrote: > On 01/05/2024 00:35, Dave Chinner wrote: > > > return !((pos | len) & mask); > > I think this whole function needs to be rewritten so that > > non-power-of-2 extent sizes are supported on both devices properly. > > > > xfs_extlen_t fsbs = 1; > > u64 bytes; > > u32 mod; > > > > if (xfs_inode_has_forcealign(ip)) > > fsbs = ip->i_extsize; > > else if (XFS_IS_REALTIME_INODE(ip)) > > fsbs = mp->m_sb.sb_rextsize; > > > > bytes = XFS_FSB_TO_B(mp, fsbs); > > if (is_power_of_2(fsbs)) > > return !((pos | len) & (bytes - 1)); > > > > div_u64_rem(pos, bytes, &mod); > > if (mod) > > return false; > > div_u64_rem(len, bytes, &mod); > > return mod == 0; > > ok, but I still have a doubt about non-power-of-2 forcealign extsize > support. The trouble is, non-power-of-2 extent size hints are supported for regular and realtime files for funny cases like trying to align allocations to RAID stripes. I think it would be hard to drop support for this, given that means that old filesystems can't ever get upgraded to forcealign. --D > Thanks, > John >