xa_insert(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ’– 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