From d4bceb549b091169a43103f180befc0cd1bb5ddc Mon Sep 17 00:00:00 2001 From: hengyouhai Date: Wed, 10 Apr 2024 13:30:46 +0200 Subject: [PATCH] map: add user-friendly message when ringbuffer size is incorrect Signed-off-by: hengyouhai --- map.go | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/map.go b/map.go index 1eeee1776..b2744dba9 100644 --- a/map.go +++ b/map.go @@ -490,6 +490,15 @@ func handleMapCreateError(attr sys.MapCreateAttr, spec *MapSpec, err error) erro return fmt.Errorf("map create: %w", haveFeatErr) } } + // BPF_MAP_TYPE_RINGBUF's max_entries must be a power-of-2 multiple of kernel's page size. + if errors.Is(err, unix.EINVAL) && + (attr.MapType == sys.BPF_MAP_TYPE_RINGBUF || attr.MapType == sys.BPF_MAP_TYPE_USER_RINGBUF) { + pageSize := uint32(os.Getpagesize()) + maxEntries := attr.MaxEntries + if maxEntries%pageSize != 0 || !internal.IsPow(maxEntries) { + return fmt.Errorf("map create: %w (ring map size %d not a multiple of page size %d)", err, maxEntries, pageSize) + } + } if attr.BtfFd == 0 { return fmt.Errorf("map create: %w (without BTF k/v)", err) }