On Mon, Jul 08, 2024 at 11:44:59AM +1000, Dave Chinner wrote: > On Sat, Jul 06, 2024 at 09:56:09AM +0200, Christoph Hellwig wrote: > > On Fri, Jul 05, 2024 at 04:24:45PM +0000, John Garry wrote: > > > - if (xfs_inode_has_bigrtalloc(ip)) > > > + > > > + /* Only try to free beyond the allocation unit that crosses EOF */ > > > + if (xfs_inode_has_forcealign(ip)) > > > + end_fsb = roundup_64(end_fsb, ip->i_extsize); > > > + else if (xfs_inode_has_bigrtalloc(ip)) > > > end_fsb = xfs_rtb_roundup_rtx(mp, end_fsb); > > > > Shouldn't we have a common helper to align things the right way? > > Yes, that's what I keep saying. The common way to do this is: > > align = xfs_inode_alloc_unitsize(ip); > if (align > mp->m_blocksize) > end_fsb = roundup_64(end_fsb, align); > > Wrapping that into a helper might be appropriate, though we'd need > wrappers for aligning both the start (down) and end (up). I think the above is already good enough.