xas_reload(9)
π xas_reload(9) β like, the kernel API manual page, bestie π
Okay so welcome to xas_reload(9) from the Kernel API Manual β yes that's the manual name, and no I will not be normal about this function. It's tiny. It's one (1) job. And it does that job immaculately. π
β¨ NAME β¨
xas_reload β refetch an entry from the xarray. That's it. That's the whole vibe. π¦
πΈ SYNOPSIS πΈ
void * xas_reload (struct xa_state *xas );
Look at that signature. void * out, struct xa_state * in. No cap, it's giving "minimalist icon". π
π«Ά ARGUMENTS π«Ά
xasβ the XArray operation state. It's the little state struct that knows where you are in the array, bestie. Keep it close. π₯Ί
π« DESCRIPTION π«
Okay so the whole point of this function: you use it to check that a previously loaded entry still has the same value. Like a vibe check but for pointers. π₯
And why would you want that, you ask? Bestie. It is so useful for the lockless pagecache lookup β the kind where we walk the array with only the RCU lock to protect us, then lock the page, then check that the page hasn't moved since we looked it up. Walk β lock β recheck. That's the whole choreography. π§
β οΈ Real talk though: the caller guarantees thatxasis still valid. That's on you, not the function. If it may be in an error or restart state, callxas_loadinstead. Do not skip this. Do not be cute about this. π
β RETURN β
The entry at this location in the xarray. That's the return value. That's the gift. π
π SEE ALSO π
Kernel file ./include/linux/xarray.h β and then, an absolute feast of cross-references, so buckle up buttercup:
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_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)
and that's the whole page, bestie π«Άβ¨π
This lil masterpiece lives in ./include/linux and it's dated October 2026 β so yeah, go off, future manpage. ππ iykyk.
π¦ 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