On Wed, Nov 04, 2020 at 10:32:12AM +0800, xiaofeng.yan wrote: > xa_lock_irq(xa); > - curr = __xa_store(xa, index, entry, gfp); > + curr = __xa_store(xa, index, entry, GFP_ATOMIC); > xa_unlock_irq(xa); You haven't actually seen a bug, have you? You just read the code wrongly. void *__xa_store(struct xarray *xa, unsigned long index, void *entry, gfp_t gfp) ... } while (__xas_nomem(&xas, gfp)); ... if (gfpflags_allow_blocking(gfp)) { xas_unlock_type(xas, lock_type); xas->xa_alloc = kmem_cache_alloc(radix_tree_node_cachep, gfp); xas_lock_type(xas, lock_type);