In numerous BPF programs, I've found myself needing to iterate over some in-kernel generic data structure i.e. list_head, hlist_head, rbtree, etc. The approach that I generally use to do this consists of using bpf_loop(), container_of(), and BPF_CORE_READ(). The end result of this approach is always rather messy as it's mostly implementation specific and bound to a specific in-kernel type i.e. mount, dentry, inode, etc. Recently, I came across the newly added bpf_for_each() open-coded iterator, which could possibly help out a little with trivially performing such iterations within BPF programs. However, looking into the usage of this helper a little more, I realized that this too needs to be backed by the new kfunc iterator framework i.e. bpf_iter_##type##_new(), bpf_iter_##type##_destroy(), bpf_iter_##type##_next(). So, in practice it seems like adopting this approach to solve this specific iterator problem would lead us into a situation where we'd be having to define iterator kfuncs for each in-kernel type and respective field. Now having said this, I'm wondering whether anyone here has considered possibly solving this iterator based problem a little more generically? That is, by exposing a set of kfuncs that allow you to iterate over a list_head, hlist_head, rbtree, etc, independent of an underlying in-kernel type and similar to your *list_for_each*() based helpers that you'd typically find for each of these in-kernel generic data structures. If so, what were your findings when exploring this problem space? /M