Hello, On Fri, Aug 07, 2026 at 12:37:31PM -0700, Ziyang Men wrote: > +__bpf_kfunc struct blkcg *bpf_get_root_blkcg(void) > +__bpf_kfunc struct blkcg *bpf_get_blkcg(struct cgroup_subsys_state *css) > +__bpf_kfunc void bpf_put_blkcg(struct blkcg *blkcg) > +__bpf_kfunc void bpf_blkcg_flush_stats(struct blkcg *blkcg)
I wonder whether making the above deal with css's would make more sense so that we don't end up with per-subsystem iterators. If casting to per-subsys type is necessary, we can provide RCU protected cast kfucns. > +__bpf_kfunc u64 bpf_blkg_iostat_bytes(struct blkcg_gq *blkg, > + enum blkg_iostat_type rw) > +__bpf_kfunc u64 bpf_blkg_iostat_ios(struct blkcg_gq *blkg, > + enum blkg_iostat_type rw) > +__bpf_kfunc u64 bpf_blkg_dev(struct blkcg_gq *blkg) Ignoring 32bit split reads (do we really care for BPF accesses?), the above can easily be done with BPF_CORE_READ(), right? Thanks. -- tejun

