On 28 May 2025, at 23:17, Dev Jain wrote: > On 28/05/25 10:42 pm, Zi Yan wrote: >> On 28 May 2025, at 7:31, Dev Jain wrote: >> >>> Suppose xas is pointing somewhere near the end of the multi-entry batch. >>> Then it may happen that the computed slot already falls beyond the batch, >>> thus breaking the loop due to !xa_is_sibling(), and computing the wrong >>> order. Thus ensure that the caller is aware of this by triggering a BUG >>> when the entry is a sibling entry. >> Is it possible to add a test case in lib/test_xarray.c for this? >> You can compile the tests with “make -C tools/testing/radix-tree” >> and run “./tools/testing/radix-tree/xarray”. > > > Sorry forgot to Cc you. > I can surely do that later, but does this patch look fine? I am not sure the exact situation you are describing, so I asked you to write a test case to demonstrate the issue. :) > > >> >>> This patch is motivated by code inspection and not a real bug report. >>> >>> Signed-off-by: Dev Jain <dev.jain@xxxxxxx> >>> --- >>> The patch applies on 6.15 kernel. >>> >>> lib/xarray.c | 2 ++ >>> 1 file changed, 2 insertions(+) >>> >>> diff --git a/lib/xarray.c b/lib/xarray.c >>> index 9644b18af18d..0f699766c24f 100644 >>> --- a/lib/xarray.c >>> +++ b/lib/xarray.c >>> @@ -1917,6 +1917,8 @@ int xas_get_order(struct xa_state *xas) >>> if (!xas->xa_node) >>> return 0; >>> >>> + XA_NODE_BUG_ON(xas->xa_node, xa_is_sibling(xa_entry(xas->xa, >>> + xas->xa_node, xas->xa_offset))); >>> for (;;) { >>> unsigned int slot = xas->xa_offset + (1 << order); >>> >>> -- >>> 2.30.2 >> >> Best Regards, >> Yan, Zi Best Regards, Yan, Zi