This series uses lookup batches for ordinary hash maps whose maximum key/value storage fits within a 4 MiB budget. It retains the existing formatting and falls back to individual lookups if the initial batch operation is unsupported. Other map types keep individual lookups.
Hash batch lookups need room for a complete bucket, so ENOSPC grows the buffer without advancing the cursor. The memory eligibility check makes that growth bounded even after output has begun. Non-ENOENT errors do not expose untrusted counts or trigger a duplicate dump restart. Related request: https://github.com/libbpf/bpftool/issues/63 The series is based on bpf-next and does not depend on my recursive map-dump series or the flags/ring-buffer series sent alongside it. Validation on x86-64, Linux 7.3.0-rc1 in KVM, LLVM 20: - Full bpftool build and focused BPF selftests build. - All 11 bpftool_map_batch subtests passed against a bpftool built with only this series: complete unordered plain, JSON and pretty JSON contents, batch boundaries, short keys, odd-sized values and BTF. - strace fault injection checked initial EINVAL/EOPNOTSUPP/ENOTSUPP fallback; ENOSPC growth initially and after progress; fatal EFAULT, ENOMEM and post-progress EIO/EINVAL; no duplicates and valid JSON. - A map exceeding the memory eligibility budget used individual lookups. - On the same static 100,000-entry hash map, BPF syscall counts dropped from 200,004 to 395. Five untraced runs had median elapsed times of 0.774 s before and 0.734 s after; text formatting still dominates. Fault injection simulates error returns; it is not a real collision stress test. Only focused selftests were run. Strict checkpatch has no errors or checks; the new test file is covered by existing MAINTAINERS patterns. Integration check: these three independent series also applied and built together with my previously posted recursive map-dump v2 series. The combined 64 subtests passed with no skips or failures in the same guest. Tianyi Chen (2): bpftool: Use batch lookups for bounded hash map dumps selftests/bpf: Check bpftool batch map dump contents tools/bpf/bpftool/map.c | 113 ++++++++++- .../bpf/prog_tests/bpftool_map_batch.c | 186 ++++++++++++++++++ 2 files changed, 291 insertions(+), 8 deletions(-) create mode 100644 tools/testing/selftests/bpf/prog_tests/bpftool_map_batch.c -- 2.55.0

