Andrii raised a concern that current uapi for bpf iterator map element is a little restrictive and not suitable for future potential complex customization. This is a valid suggestion, considering people may indeed add more complex custimization to the iterator, e.g., cgroup_id + user_id, etc. for task or task_file. Another example might be map_id plus additional control so that the bpf iterator may bail out a bucket earlier if a bucket has too many elements which may hold lock too long and impact other parts of systems. Patch #1 modified uapi with kernel changes. Patch #2 adjusted libbpf api accordingly. Changelogs: v1 -> v2: . ensure link_create target_fd/flags == 0 since they are not used. (Andrii) . if either of iter_info ptr == 0 or iter_info_len == 0, but not both, return error to user space. (Andrii) . do not reject iter_info.map.map_fd == 0, go ahead to use it trying to get a map reference since the map_fd is required for map_elem iterator. . use bpf_iter_link_info in bpf_iter_attach_opts instead of map_fd. this way, user space is responsible to set up bpf_iter_link_info and libbpf just passes the data to the kernel, simplifying libbpf design. (Andrii) Yonghong Song (2): bpf: change uapi for bpf iterator map elements tools/bpf: support new uapi for map element bpf iterator include/linux/bpf.h | 10 ++-- include/uapi/linux/bpf.h | 15 ++--- kernel/bpf/bpf_iter.c | 58 +++++++++---------- kernel/bpf/map_iter.c | 34 ++++++++--- kernel/bpf/syscall.c | 2 +- net/core/bpf_sk_storage.c | 34 ++++++++--- tools/bpf/bpftool/iter.c | 8 ++- tools/include/uapi/linux/bpf.h | 15 ++--- tools/lib/bpf/bpf.c | 3 + tools/lib/bpf/bpf.h | 4 +- tools/lib/bpf/libbpf.c | 6 +- tools/lib/bpf/libbpf.h | 4 +- .../selftests/bpf/prog_tests/bpf_iter.c | 34 ++++++++--- 13 files changed, 146 insertions(+), 81 deletions(-) -- 2.24.1