xas_for_each_marked(9)
β¨ xas_for_each_marked β Kernel API Manual β¨
okay so bestie, welcome to the xas_for_each_marked(9) page π
this one lives in the Kernel API Manual and it's literally all about iterating over a range of an XArray. no cap, it's a good one π¦
πΈ NAME πΈ
xas_for_each_marked β iterate over a range of an XArray.
β¨ SYNOPSIS β¨
xas_for_each_marked (xas , entry , max , mark );
π ARGUMENTS π
xasβ the XArray operation state, aka the vibe check of your iterator π«Άentryβ the entry retrieved from the array, this is where the good stuff lands πmaxβ maximum index to retrieve from the array, like the cutoff point, don't go past it bestiemarkβ the mark to search for π
π DESCRIPTION π
the way that this works is so iconic honestly: the loop body gets executed for each marked entry in the xarray between the current xas position and max π₯ and entry will be set to the entry retrieved from the xarray. yes bestie, that's your actual data right there β¨
it is safe to delete entries from the array in the loop body β go off, you have permission π
but you should hold either the RCU lock or the xa_lock while iterating, fr fr, that part is not optional energy π
and if you need to drop the lock? call xas_pause first. like literally first. don't skip that step bestie π
π SEE ALSO π
Kernel file ./include/linux/xarray.h and honestly the whole extended family:
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_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_conflict(9), xas_prev(9), xas_next(9)
that's the whole page bestie, you ate it π
β¨ this one came from ./include/linux and the version is dated October 2026 β periodt, go iterate something marked and stay safe with those locks ππ
π¦ 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