On Tue, Aug 20, 2024 at 07:04:57PM +0200, Christoph Hellwig wrote: > Currently the debug-only xfs_bmap_exact_minlen_extent_alloc allocation > variant fails to drop into the lowmode last restor allocator, and last resort? > thus can sometimes fail allocations for which the caller has a > transaction block reservation. > > Fix this by using xfs_bmap_btalloc_low_space to do the actual allocation. > > Signed-off-by: Christoph Hellwig <hch@xxxxxx> > --- > fs/xfs/libxfs/xfs_bmap.c | 8 +++++++- > 1 file changed, 7 insertions(+), 1 deletion(-) > > diff --git a/fs/xfs/libxfs/xfs_bmap.c b/fs/xfs/libxfs/xfs_bmap.c > index b5eeaea164ee46..784dd5dda2a1a2 100644 > --- a/fs/xfs/libxfs/xfs_bmap.c > +++ b/fs/xfs/libxfs/xfs_bmap.c > @@ -3493,7 +3493,13 @@ xfs_bmap_exact_minlen_extent_alloc( > */ > ap->blkno = XFS_AGB_TO_FSB(ap->ip->i_mount, 0, 0); > > - return xfs_alloc_vextent_first_ag(args, ap->blkno); > + /* > + * Use the low space allocator as it first does a "normal" AG iteration > + * and then drops the reservation to minlen, which might be required to > + * find an allocation for the transaction reservation when the file > + * system is very full. Isn't it already doing a minlen allocation? Oh, that probably refers to shrinking args->total, doesn't it. If the answer to that is 'yes' then Reviewed-by: Darrick J. Wong <djwong@xxxxxxxxxx> --D > + */ > + return xfs_bmap_btalloc_low_space(ap, args); > } > #else > > -- > 2.43.0 > >