hlist_del_rcu(9)
π hlist_del_rcu π
okay so bestie, welcome to the Kernel API Manual (section 9, yes it's giving very official) β this one's about deletes entry from hash list without re-initialization. slay, let's get into it π
β¨ SYNOPSIS β¨
void hlist_del_rcu (struct hlist_node *n );
literally the whole signature, no cap π«Ά
πΈ ARGUMENTS πΈ
nβ the element to delete from the hash list. that's the one, the main character of this operation π
π NOTE π
okay this part is important, listen up π
list_unhashed on entry does not return true after this β the entry is left in an undefined state. ngl that sounds scary but it's actually the whole point: it's useful for RCU based lockfree traversal β¨
In particular, it means that we can not poison the forward pointers that may still be used for walking the hash list. like, we just can't, they're still out there being used π
The caller must take whatever precautions are necessary (such as holding appropriate locks) to avoid racing with another list-mutation primitive, such ashlist_add_head_rcuorhlist_del_rcu, running on this same list.
that's the "you're on your own for locking, bestie" clause π«Ά
But β and this is the iconic part β it is perfectly legal to run concurrently with the _rcu list-traversal primitives, such as hlist_for_each_entry. yes queen, concurrent read while you delete, that's the vibe check passing π
π SEE ALSO π
Kernel file ./include/linux/rculist.h, plus this whole friend group right here:
list_for_each_rcu(9)list_tail_rcu(9)list_add_rcu(9)list_add_tail_rcu(9)list_del_rcu(9)list_bidir_del_rcu(9)hlist_del_init_rcu(9)list_replace_rcu(9)list_splice_rcu(9)__list_splice_init_rcu(9)list_splice_init_rcu(9)list_splice_tail_init_rcu(9)list_entry_rcu(9)list_first_or_null_rcu(9)list_next_or_null_rcu(9)list_for_each_entry_rcu(9)list_for_each_entry_srcu(9)list_entry_lockless(9)list_for_each_entry_lockless(9)list_for_each_entry_continue_rcu(9)list_for_each_entry_from_rcu(9)hlist_replace_rcu(9)hlists_swap_heads_rcu(9)hlist_add_head_rcu(9)hlist_add_tail_rcu(9)hlist_add_before_rcu(9)hlist_add_behind_rcu(9)hlist_for_each_entry_rcu(9)hlist_for_each_entry_srcu(9)hlist_for_each_entry_rcu_notrace(9)hlist_for_each_entry_rcu_bh(9)hlist_for_each_entry_continue_rcu(9)hlist_for_each_entry_continue_rcu_bh(9)hlist_for_each_entry_from_rcu(9)
that's the whole page, bestie, you ate it π
source dir ./include/linux Β· dated October 2026 Β· mwah π go forth and traverse safely π¦
π¦ 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