On 8/18/20 3:23 PM, Yonghong Song wrote:
Patch #1 fixed a rcu stall warning when traversing large number of tasks/files without overflowing seq_file buffer. The method is to control the number of visited objects in bpf_seq_read() so all bpf iterators will benefit. Patch #2 calculated tid properly in a namespace in order to avoid visiting the name task multiple times. Patch #3 handled read() error code EAGAIN properly in bpftool bpf_iter userspace code to collect pids. The change is needed due to Patch #1.
Sorry. Missed the changelog below. Changelogs: - v1 -> v2: . do ratelimiting in bpf_seq_read() with a counter. cond_resched() doesn't work as some iterators (e.g., tcp, netlink, etc.) has rcu read critical section across consecutive seq_ops->next() functions.
Yonghong Song (3): bpf: fix a rcu_sched stall issue with bpf task/task_file iterator bpf: avoid visit same object multiple times bpftool: handle EAGAIN error code properly in pids collection kernel/bpf/bpf_iter.c | 15 ++++++++++++++- kernel/bpf/task_iter.c | 3 ++- tools/bpf/bpftool/pids.c | 2 ++ 3 files changed, 18 insertions(+), 2 deletions(-)