Re: [PATCH v3 10/21] xfs: Update xfs_is_falloc_aligned() mask for forcealign

From: Darrick J. Wong
Date: Wed May 01 2024 - 19:45:34 EST


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
>