xas_for_each_marked(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

✨ 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 bestie
  • mark β€” 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