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

From: John Garry
Date: Wed May 01 2024 - 06:49:44 EST


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.

Thanks,
John