xa_insert_bh(9)
β¨ xa_insert_bh(9) β¨
okay so before we even start: this is a page from the Kernel API Manual (the xa_insert_bh(9) entry, if you're keeping track bestie π
) and it's about the insert-but-only-if-nobody's-home move for XArrays. no cap, it's a whole vibe.
πΈ NAME πΈ
xa_insert_bh β store this entry in the XArray unless another entry is already present.
like, it's the "is this seat taken?" of kernel data structures. if someone's already sitting there, it does NOT shove them out. it just leaves. iconic behavior tbh π«Ά
π¦ SYNOPSIS π¦
int xa_insert_bh (struct xarray *xa , unsigned long index , void *entry
, gfp_t gfp );
π ARGUMENTS π
xaβ the XArray itself. the whole icon, the main character πindexβ the index into the array. basically where you're dropping your stuff.entryβ the new entry. the thing you're inserting β¨gfpβ memory allocation flags. this is the "how hard am I allowed to try" knob.
π DESCRIPTION π
so here's the tea π΅ β if you insert a NULL entry, it will store a reserved entry (like xa_reserve does) as long as no entry is present at that spot.
but bestie, listen: inserting will fail if a reserved entry is already present. and that's the little cursed part π β even though loading from that index will return NULL, the insert still says nope. it's giving "the seat's saved but nobody's in it, so you still can't sit down." iykyk.
π CONTEXT π
Any context. seriously, any.
it takes and releases the xa_lock while disabling softirqs, and it may sleep if the gfp flags permit it. so like, it's flexible, but pay attention to those flags, okay? π
β RETURN β
0β the store succeeded, slay π-EBUSYβ another entry was present. somebody got there first, and no, we're not fighting about it π«-ENOMEMβ memory could not be allocated. the budget said no πΈ
π§ SEE ALSO π§
kernel file ./include/linux/xarray.h
the full squad, in the order the page gives them β no gatekeeping, no skips π₯
xa_mk_value(9), xa_to_value(9), xa_is_value(9), xa_tag_pointer(9), xa_untag_pointer(9), xa_pointer_tag(9), xa_is_zero(9), xa_is_err(9), xa_err(9), struct xa_limit(9), struct xarray(9), DEFINE_XARRAY_FLAGS(9), DEFINE_XARRAY(9), DEFINE_XARRAY_ALLOC(9), DEFINE_XARRAY_ALLOC1(9), xa_init_flags(9), xa_init(9), xa_empty(9), xa_marked(9), xa_for_each_range(9), xa_for_each_start(9), xa_for_each(9), xa_for_each_marked(9), xa_store_bh(9), xa_store_irq(9), xa_erase_bh(9), xa_erase_irq(9), xa_cmpxchg(9), xa_cmpxchg_bh(9), xa_cmpxchg_irq(9), xa_insert(9), xa_insert_irq(9), xa_alloc(9), xa_alloc_bh(9), xa_alloc_irq(9), xa_alloc_cyclic(9), xa_alloc_cyclic_bh(9), xa_alloc_cyclic_irq(9), xa_reserve(9), xa_reserve_bh(9), xa_reserve_irq(9), xa_release(9), xa_is_sibling(9), xa_is_retry(9), xa_is_advanced(9), xa_update_node_t(9), XA_STATE(9), XA_STATE_ORDER(9), xas_error(9), xas_set_err(9), xas_invalid(9), xas_valid(9), xas_is_node(9), xas_reset(9), xas_retry(9), xas_reload(9), xas_set(9), xas_advance(9), xas_set_order(9), xas_set_update(9), xas_next_entry(9), xas_next_marked(9), xas_for_each(9), xas_for_each_marked(9), xas_for_each_conflict(9), xas_prev(9), xas_next(9)
k byeee, this page lives in ./include/linux and it's dated October 2026 β go read the header and stay hydrated bestie ππ
π¦ where this page comes from
- nixpkgs unstable: linux-manual 7.3.1
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms