Re: [PATCH] xfs: fix AGFL extent count calculation in xrep_agfl_fill

From: Darrick J. Wong

Date: Wed Jun 24 2026 - 13:08:35 EST


On Tue, Jun 23, 2026 at 10:41:53AM +0800, jiazhenyuan wrote:
> In xrep_agfl_fill(), the call to xagb_bitmap_set() passes
> 'agbno - 1' as the length argument. However, xagb_bitmap_set()
> expects a length (number of blocks), not an end block number.
> Passing 'agbno - 1' causes used_extents to record an incorrect
> range.
>
> Fix this by calculating the correct length as 'agbno - start',
> which represents the actual number of blocks filled into the AGFL.

I have a stack of bugfixes waiting for the 7.2-rc rebase, and this
is one of them. But since you posted first, I no longer have to seek
approval for it. :)

With this added,

Cc: <stable@xxxxxxxxxxxxxxx> # v6.6
Fixes: 014ad53732d2ba ("xfs: use per-AG bitmaps to reap unused AG metadata blocks during repair")

Reviewed-by: "Darrick J. Wong" <djwong@xxxxxxxxxx>

--D



> Signed-off-by: jiazhenyuan <jiazhenyuan@xxxxxxxxxxxxx>
> ---
> fs/xfs/scrub/agheader_repair.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/fs/xfs/scrub/agheader_repair.c b/fs/xfs/scrub/agheader_repair.c
> index ae9ed5f280d0..b0ffd37afb45 100644
> --- a/fs/xfs/scrub/agheader_repair.c
> +++ b/fs/xfs/scrub/agheader_repair.c
> @@ -652,7 +652,7 @@ xrep_agfl_fill(
> while (agbno < start + len && af->fl_off < af->flcount)
> af->agfl_bno[af->fl_off++] = cpu_to_be32(agbno++);
>
> - error = xagb_bitmap_set(&af->used_extents, start, agbno - 1);
> + error = xagb_bitmap_set(&af->used_extents, start, agbno - start);
> if (error)
> return error;
>
> --
> 2.20.1
>
>