From 380da65a625931484e6ba3b2f52e3d5bf6e28691 Mon Sep 17 00:00:00 2001 From: astoycos Date: Thu, 21 Sep 2023 13:50:21 -0400 Subject: [PATCH] aya/maps: fix libbpf_pin_by_name Aligns with libbpf for the special LIBBPF_PIN_BY_NAME map flag. Specifically if the flag is provided without a pin path default to "/sys/fs/bpf". Signed-off-by: astoycos --- aya/src/bpf.rs | 9 +++++++-- aya/src/maps/mod.rs | 3 +-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/aya/src/bpf.rs b/aya/src/bpf.rs index a5fb9273..03b2fa99 100644 --- a/aya/src/bpf.rs +++ b/aya/src/bpf.rs @@ -477,8 +477,13 @@ impl<'a> BpfLoader<'a> { let mut map = match obj.pinning() { PinningType::None => MapData::create(obj, &name, btf_fd)?, PinningType::ByName => { - let path = map_pin_path.as_ref().ok_or(BpfError::NoPinPath)?; - MapData::create_pinned(path, obj, &name, btf_fd)? + let path = match &map_pin_path { + Some(p) => p.to_owned(), + // pin maps in /sys/fs/bpf by default to align with libbpf + // behavior https://github.com/libbpf/libbpf/blob/v1.2.2/src/libbpf.c#L2161. + None => PathBuf::from("/sys/fs/bpf"), + }; + MapData::create_pinned_by_name(path, obj, &name, btf_fd)? } }; map.finalize()?; diff --git a/aya/src/maps/mod.rs b/aya/src/maps/mod.rs index 191c5883..e79b53e8 100644 --- a/aya/src/maps/mod.rs +++ b/aya/src/maps/mod.rs @@ -440,7 +440,7 @@ impl MapData { Ok(Self { obj, fd }) } - pub(crate) fn create_pinned>( + pub(crate) fn create_pinned_by_name>( path: P, obj: obj::Map, name: &str, @@ -469,7 +469,6 @@ impl MapData { } Err(_) => { let mut map = Self::create(obj, name, btf_fd)?; - let path = path.join(name); map.pin(&path).map_err(|error| MapError::PinError { name: Some(name.into()), error,