From 0bf97eba64b44835300d8291cd4f78c220c3ad48 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 | 13 +++++++------ aya/src/maps/mod.rs | 3 +-- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/aya/src/bpf.rs b/aya/src/bpf.rs index 2272bc52..7e03a12a 100644 --- a/aya/src/bpf.rs +++ b/aya/src/bpf.rs @@ -492,8 +492,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)? + // 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. + let path = map_pin_path + .as_deref() + .unwrap_or_else(|| Path::new("/sys/fs/bpf")); + + MapData::create_pinned_by_name(path, obj, &name, btf_fd)? } }; map.finalize()?; @@ -951,10 +956,6 @@ pub enum BpfError { error: io::Error, }, - /// Pinning requested but no path provided - #[error("pinning requested but no path provided")] - NoPinPath, - /// Unexpected pinning type #[error("unexpected pinning type {name}")] UnexpectedPinningType { diff --git a/aya/src/maps/mod.rs b/aya/src/maps/mod.rs index 84971419..af9ec868 100644 --- a/aya/src/maps/mod.rs +++ b/aya/src/maps/mod.rs @@ -461,7 +461,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, @@ -490,7 +490,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,