Re: [PATCH bpf-next 3/4] bpf: Introduce path iterator
From: Song Liu <song@kernel.org>
Date: 2025-06-02 21:39:58
Also in:
bpf, linux-fsdevel, lkml
On Mon, Jun 2, 2025 at 8:40 AM Alexei Starovoitov [off-list ref] wrote:
On Mon, Jun 2, 2025 at 6:27 AM Song Liu [off-list ref] wrote:quoted
On Mon, Jun 2, 2025 at 2:27 AM Christian Brauner [off-list ref] wrote:quoted
On Thu, May 29, 2025 at 11:00:51AM -0700, Song Liu wrote:quoted
On Thu, May 29, 2025 at 10:38 AM Al Viro [off-list ref] wrote:quoted
On Thu, May 29, 2025 at 09:53:21AM -0700, Song Liu wrote:quoted
Current version of path iterator only supports walking towards the root, with helper path_parent. But the path iterator API can be extended to cover other use cases.Clarify the last part, please - call me paranoid, but that sounds like a beginning of something that really should be discussed upfront.We don't have any plan with future use cases yet. The only example I mentioned in the original version of the commit log is "walk the mount tree". IOW, it is similar to the current iterator, but skips non mount point iterations. Since we call it "path iterator", it might make sense to add ways to iterate the VFS tree in different patterns. For example, we mayNo, we're not adding a swiss-army knife for consumption by out-of-tree code. I'm not opposed to adding a sane iterator for targeted use-cases with a clear scope and internal API behavior as I've said multiple times already on-list and in-person. I will not merge anything that will endup exploding into some fancy "walk subtrees in any order you want".We are not proposing (and AFAICT never proposed) to have a swiss-army knife that "walk subtrees in any order you want". Instead, we are proposing a sane iterator that serves exactly one use case now. I guess the concern is that it looks extensible. However, I made the API like this so that it can be extended, with thorough reviews, to cover another sane use case. If there is still concern with this. We sure can make current code not extensible. In case there is a different sane use case, we will introduce another iterator after thorough reviews.It's good that the iterator is extensible, but to achieve that there is no need to introduce "enum bpf_path_iter_mode" which implies some unknown walk patterns. Just add "u64 flags" to bpf_iter_path_new() and if (!flags) return -EINVAL; Then we'll have a way to extend that kfunc if really necessary. Deleting and introducing new kfuncs/iterators is not a big deal, but reserving 'flags' as an option for extension is almost always a good backup.
Sounds good! I will prepare v2 with a flags field. Thanks, Song