When the error code is EAGAIN, the kernel signals the user
space should retry the read() operation for bpf iterators.
Let us do it.

Signed-off-by: Yonghong Song <y...@fb.com>
---
 tools/bpf/bpftool/pids.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/tools/bpf/bpftool/pids.c b/tools/bpf/bpftool/pids.c
index e3b116325403..df7d8ec76036 100644
--- a/tools/bpf/bpftool/pids.c
+++ b/tools/bpf/bpftool/pids.c
@@ -134,6 +134,8 @@ int build_obj_refs_table(struct obj_refs_table *table, enum 
bpf_obj_type type)
        while (true) {
                ret = read(fd, buf, sizeof(buf));
                if (ret < 0) {
+                       if (errno == EAGAIN)
+                               continue;
                        err = -errno;
                        p_err("failed to read PID iterator output: %d", err);
                        goto out;
-- 
2.24.1

Reply via email to