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