xa_for_each(9)
π xa_for_each β the manual page, but make it make sense
okay so this is xa_for_each(9) from the Kernel API Manual, and honestly? she's iconic. let's get into it π«Ά
β¨ NAME β¨
xa_for_each β the iterator that walks over all the present entries in an XArray. that's it, that's the vibe. π¦
πΈ SYNOPSIS πΈ
xa_for_each (xa , index , entry );
π ARGUMENTS π
xaβ your XArray. the whole thing. the main character, lowkey πindexβ the index of an entry. yes bestie, you track where you're at with this πentryβ the entry that got retrieved from the array. this is what you came for β¨
π DESCRIPTION π
so during the iteration, entry is gonna hold the value of whatever entry is stored in xa at index. literally that simple, no cap.
and here's the cute part β you're allowed to modify index mid-iteration if you wanna skip some indices or reprocess them. honestly? flexible queen behaviour. π§ it's also safe to modify the array while you're iterating. go off.
at the end of the iteration, entry gets set to NULL and index will have a value less than or equal to max. so don't be weirded out when it ends like that, that's just how she wraps up π¬
now for the part where you gotta pay attention, bestie, because this is the whole comparison saga:
xa_for_eachis O(n.log(n)) whilexas_for_eachis O(n). different tax brackets, fr fr π- with
xas_for_eachyou have to handle your own locking β yes, your own. and if you have to unlock after each iteration, it will also end up being O(n.log(n)). so likeβ¦ the speed flex kind of evaporates π xa_for_eachwill spin if it hits a retry entry. so if you actually intend to see retry entries, you should use thexas_for_eachiterator instead. periodt.xas_for_eachwill expand into more inline code thanxa_for_each. so there's a tradeoff, iykyk π
π CONTEXT π
Any context. she takes and releases the RCU lock. that's it. she's low maintenance π
π₯ SEE ALSO π₯
okay the cross-reference list is long long, but every single one of these deserves their moment. no skips, no cuts, we respect the whole squad π
- Kernel file
./include/linux/xarray.h 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_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_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)
lowkey reminder bestie:xa_for_eachwill spin on a retry entry, and it's O(n.log(n)) β if that's a problem for your use case,xas_for_eachis right there but you gotta do your own locking. know the difference, okay? π
and that's the page!! mwah π this one came to you from ./include/linux, dated October 2026, living in the Kernel API Manual β go forth and iterate, you absolute legend πβπ
π¦ 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