On Thu, May 27, 2021 at 02:52:00PM +1000, Dave Chinner wrote: > From: Dave Chinner <dchinner@xxxxxxxxxx> > > Lots of the transaction reservation code reserves space for an > extent allocation. It is inconsistently implemented, and many of > them get it wrong. Introduce a new function to calculate the log > space reservation for adding or removing an extent from the free > space btrees. > > This function reserves space for logging the AGF, the AGFL and the > free space btrees, avoiding the need to account for them seperately > in every reservation that manipulates free space. > > Signed-off-by: Dave Chinner <dchinner@xxxxxxxxxx> > --- > fs/xfs/libxfs/xfs_trans_resv.c | 17 +++++++++++++++++ > 1 file changed, 17 insertions(+) > > diff --git a/fs/xfs/libxfs/xfs_trans_resv.c b/fs/xfs/libxfs/xfs_trans_resv.c > index d1a0848cb52e..6363cacb790f 100644 > --- a/fs/xfs/libxfs/xfs_trans_resv.c > +++ b/fs/xfs/libxfs/xfs_trans_resv.c > @@ -79,6 +79,23 @@ xfs_allocfree_log_count( > return blocks; > } > > +/* > + * Log reservation required to add or remove a single extent to the free space > + * btrees. This requires modifying: > + * > + * the agf header: 1 sector > + * the agfl header: 1 sector > + * the allocation btrees: 2 trees * (max depth - 1) * block size > + */ > +uint > +xfs_allocfree_extent_res( > + struct xfs_mount *mp) > +{ > + return xfs_calc_buf_res(2, mp->m_sb.sb_sectsize) + > + xfs_calc_buf_res(xfs_allocfree_log_count(mp, 1), > + XFS_FSB_TO_B(mp, 1)); > +} > + No caller? I think the next patch should get merged into this one. --D > /* > * Logging inodes is really tricksy. They are logged in memory format, > * which means that what we write into the log doesn't directly translate into > -- > 2.31.1 >