Re: [PATCH v3 bpf-next 1/5] namei: Introduce new helper function path_walk_parent()

From: Song Liu
Date: Wed Jun 11 2025 - 12:32:06 EST


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