xa_insert(9)
π xa_insert β the "only if it's free" store π
ok so this is xa_insert(9) from the Kernel API Manual, and honestly bestie, she's the picky friend of the XArray family π
β¨ NAME β¨
xa_insert β store this entry in the XArray unless another entry is already present. like, she'll put your stuff away, but only if the spot is empty. she does not do overwrites. periodt π
πΈ SYNOPSIS πΈ
int xa_insert (struct xarray *xa , unsigned long index , void *entry ,
gfp_t gfp );
π¦ ARGUMENTS π¦
xaβ the XArray. your array. the main character πindexβ index into array. where you're sliding into π«Άentryβ new entry. the thing you're storing πgfpβ memory allocation flags π
π DESCRIPTION π
okay so here's the tea π: if you insert a NULL entry, it will store a reserved entry (like xa_reserve does) if no entry is present. no cap.
but β and this is the important bit β inserting will fail if a reserved entry is present, even though loading from this index will return NULL. like, the slot looks empty from the outside but she knows somebody called dibs. lowkey shady but that's the rule π
β CONTEXT β
Any context! she's flexible like that π
Takes and releases the xa_lock. May sleep if the gfp flags permit π΄β¨
π₯ RETURN π₯
0β if the store succeeded. slay π-EBUSYβ if another entry was present. someone was already there, sorry bestie π-ENOMEMβ if memory could not be allocated. it's giving out of RAM energy π
π§ SEE ALSO π§
Kernel file ./include/linux/xarray.h β and the whole extended friend group: 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_bh(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) π«Άβ¨
ngl bestie, that last list is a whole group chat. read 'em all, iykyk ππ
and that's the whole page!! brought to you straight outta ./include/linux, dated October 2026 β mwah, catch you in the next man page πππ
π¦ 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