Hi Andrew, this patch is broken. Could you please fold this fix into it? https://lore.kernel.org/all/CAJ-ks9kN_qddZ3Ne5d=cADu5POC1rHd4rQcbVSD_spnZOrLLZg@xxxxxxxxxxxxxx/ Apologies for the breakage. Tamir On Sat, Nov 30, 2024 at 12:09 AM Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> wrote: > > > The patch titled > Subject: xarray: extract helper from __xa_{insert,cmpxchg} > has been added to the -mm mm-nonmm-unstable branch. Its filename is > xarray-extract-helper-from-__xa_insertcmpxchg.patch > > This patch will shortly appear at > https://git.kernel.org/pub/scm/linux/kernel/git/akpm/25-new.git/tree/patches/xarray-extract-helper-from-__xa_insertcmpxchg.patch > > This patch will later appear in the mm-nonmm-unstable branch at > git://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm > > Before you just go and hit "reply", please: > a) Consider who else should be cc'ed > b) Prefer to cc a suitable mailing list as well > c) Ideally: find the original patch on the mailing list and do a > reply-to-all to that, adding suitable additional cc's > > *** Remember to use Documentation/process/submit-checklist.rst when testing your code *** > > The -mm tree is included into linux-next via the mm-everything > branch at git://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm > and is updated there every 2-3 working days > > ------------------------------------------------------ > From: Tamir Duberstein <tamird@xxxxxxxxx> > Subject: xarray: extract helper from __xa_{insert,cmpxchg} > Date: Tue, 12 Nov 2024 14:25:37 -0500 > > Reduce code duplication by extracting a static inline function. This > function is identical to __xa_cmpxchg with the exception that it does not > coerce zero entries to null on the return path. > > Link: https://lkml.kernel.org/r/20241112-xarray-insert-cmpxchg-v1-2-dc2bdd8c4136@xxxxxxxxx > Signed-off-by: Tamir Duberstein <tamird@xxxxxxxxx> > Cc: Alice Ryhl <aliceryhl@xxxxxxxxxx> > Cc: Andreas Hindborg <a.hindborg@xxxxxxxxxx> > Cc: Matthew Wilcox <willy@xxxxxxxxxxxxx> > Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> > --- > > lib/xarray.c | 37 ++++++++++++++++++------------------- > 1 file changed, 18 insertions(+), 19 deletions(-) > > --- a/lib/xarray.c~xarray-extract-helper-from-__xa_insertcmpxchg > +++ a/lib/xarray.c > @@ -1491,7 +1491,7 @@ static void *xas_result(struct xa_state > { > if (xas_error(xas)) > curr = xas->xa_node; > - return xa_zero_to_null(curr); > + return curr; > } > > /** > @@ -1568,7 +1568,7 @@ void *__xa_store(struct xarray *xa, unsi > xas_clear_mark(&xas, XA_FREE_MARK); > } while (__xas_nomem(&xas, gfp)); > > - return xas_result(&xas, curr); > + return xas_result(&xas, xa_zero_to_null(curr)); > } > EXPORT_SYMBOL(__xa_store); > > @@ -1601,6 +1601,9 @@ void *xa_store(struct xarray *xa, unsign > } > EXPORT_SYMBOL(xa_store); > > +static inline void *__xa_cmpxchg_raw(struct xarray *xa, unsigned long index, > + void *old, void *entry, gfp_t gfp); > + > /** > * __xa_cmpxchg() - Store this entry in the XArray. > * @xa: XArray. > @@ -1620,6 +1623,13 @@ EXPORT_SYMBOL(xa_store); > void *__xa_cmpxchg(struct xarray *xa, unsigned long index, > void *old, void *entry, gfp_t gfp) > { > + return xa_zero_to_null(__xa_cmpxchg_raw(xa, index, old, entry, gfp)); > +} > +EXPORT_SYMBOL(__xa_cmpxchg); > + > +static inline void *__xa_cmpxchg_raw(struct xarray *xa, unsigned long index, > + void *old, void *entry, gfp_t gfp) > +{ > XA_STATE(xas, xa, index); > void *curr; > > @@ -1637,7 +1647,6 @@ void *__xa_cmpxchg(struct xarray *xa, un > > return xas_result(&xas, curr); > } > -EXPORT_SYMBOL(__xa_cmpxchg); > > /** > * __xa_insert() - Store this entry in the XArray if no entry is present. > @@ -1657,26 +1666,16 @@ EXPORT_SYMBOL(__xa_cmpxchg); > */ > int __xa_insert(struct xarray *xa, unsigned long index, void *entry, gfp_t gfp) > { > - XA_STATE(xas, xa, index); > void *curr; > + int errno; > > - if (WARN_ON_ONCE(xa_is_advanced(entry))) > - return -EINVAL; > if (!entry) > entry = XA_ZERO_ENTRY; > - > - do { > - curr = xas_load(&xas); > - if (!curr) { > - xas_store(&xas, entry); > - if (xa_track_free(xa)) > - xas_clear_mark(&xas, XA_FREE_MARK); > - } else { > - xas_set_err(&xas, -EBUSY); > - } > - } while (__xas_nomem(&xas, gfp)); > - > - return xas_error(&xas); > + curr = __xa_cmpxchg_raw(xa, index, NULL, entry, gfp); > + errno = xa_err(curr); > + if (errno) > + return errno; > + return (curr != NULL) ? -EBUSY : 0; > } > EXPORT_SYMBOL(__xa_insert); > > _ > > Patches currently in -mm which might be from tamird@xxxxxxxxx are > > xarray-extract-xa_zero_to_null.patch > xarray-extract-helper-from-__xa_insertcmpxchg.patch >