Re: [External] : [PATCH 1/2] xfs: set minleft correctly for sparse chunk errortag allocation
Mark Tinguely <[email protected]> Fri, 31 Jul 2026 13:02:50 -0500
| Newsgroups | org.kernel.vger.linux-xfs |
|---|---|
| Message-ID | <[email protected]> |
On 7/31/26 11:33 AM, Brian Foster wrote:
> The errortag instrumentation for forced sparse chunk allocation
> jumps straight to the allocation path without setting args.minleft.
> minleft is unconditionally set to ->inobt_maxlevels for the normal
> allocation path. Lift the assignment to the initial args setup so
> it covers all possible paths.
>
> Assisted-by: LLM
> Fixes: 1cdadee11f8d ("xfs: randomly do sparse inode allocations in DEBUG mode")
> Signed-off-by: Brian Foster <[email protected]>
> ---
> fs/xfs/libxfs/xfs_ialloc.c | 10 ++++------
> 1 file changed, 4 insertions(+), 6 deletions(-)
>
> diff --git a/fs/xfs/libxfs/xfs_ialloc.c b/fs/xfs/libxfs/xfs_ialloc.c
> index ffcdd1f691fd..633b2d6e42c5 100644
> --- a/fs/xfs/libxfs/xfs_ialloc.c
> +++ b/fs/xfs/libxfs/xfs_ialloc.c
> @@ -733,6 +733,10 @@ xfs_ialloc_ag_alloc(
> igeo->maxicount)
> return -ENOSPC;
> args.minlen = args.maxlen = igeo->ialloc_blks;
> +
> + /* Allow space for the inode btree to split. */
> + args.minleft = igeo->inobt_maxlevels;
> +
> /*
> * First try to allocate inodes contiguous with the last-allocated
> * chunk of inodes. If the filesystem is striped, this will fill
> @@ -764,8 +768,6 @@ xfs_ialloc_ag_alloc(
> args.alignment = 1;
> args.minalignslop = igeo->cluster_align - 1;
>
> - /* Allow space for the inode btree to split. */
> - args.minleft = igeo->inobt_maxlevels;
> error = xfs_alloc_vextent_exact_bno(&args,
> xfs_agbno_to_fsb(pag, args.agbno));
> if (error)
> @@ -804,10 +806,6 @@ xfs_ialloc_ag_alloc(
> * Allocate a fixed-size extent of inodes.
> */
> args.prod = 1;
> - /*
> - * Allow space for the inode btree to split.
> - */
> - args.minleft = igeo->inobt_maxlevels;
> error = xfs_alloc_vextent_near_bno(&args,
> xfs_agbno_to_fsb(pag,
> be32_to_cpu(agi->agi_root)));
Reviewed-by: Mark Tinguely <[email protected]>
I got the patches backwards...I agree we need to increase the minleft in
the other patch by 4 blocks (2 btrees * 2 for the level increase) but I
wonder why can't a full size inode chunk also split the by-count and
by-block btrees and the inode btree allocation also be short when fixing AGFL?