On Wed, Jun 11, 2025 at 8:42 AM Mickaël Salaün <mic@xxxxxxxxxxx> wrote: [...] > > We can probably call this __path_walk_parent() and make it static. > > > > Then we can add an exported path_walk_parent() that calls > > __path_walk_parent() and adds extra logic. > > > > If this looks good to folks, I can draft v4 based on this idea. > > This looks good but it would be better if we could also do a full path > walk within RCU when possible. I think we will need some callback mechanism for this. Something like: for_each_parents(starting_path, root, callback_fn, cb_data, bool try_rcu) { if (!try_rcu) goto ref_walk; __read_seqcount_begin(); /* rcu walk parents, from starting_path until root */ walk_rcu(starting_path, root, path) { callback_fn(path, cb_data); } if (!read_seqcount_retry()) return xxx; /* successful rcu walk */ ref_walk: /* ref walk parents, from starting_path until root */ walk(starting_path, root, path) { callback_fn(path, cb_data); } return xxx; } Personally, I don't like this version very much, because the callback mechanism is not very flexible, and it is tricky to use it in BPF LSM. Thanks, Song