diff --git a/test/integration-ebpf/src/ring_buf_pinned.rs b/test/integration-ebpf/src/ring_buf_pinned.rs index 13f4713b..e8825a8c 100644 --- a/test/integration-ebpf/src/ring_buf_pinned.rs +++ b/test/integration-ebpf/src/ring_buf_pinned.rs @@ -11,7 +11,7 @@ use integration_common::ring_buf::Registers; extern crate ebpf_panic; #[map] -static pinned_ringbuf_reuse_test: RingBuf = RingBuf::pinned(0, 0); +static RING_BUF: RingBuf = RingBuf::with_byte_size(0, 0); // Use a PerCpuArray to store the registers so that we can update the values from multiple CPUs // without needing synchronization. Atomics exist [1], but aren't exposed. @@ -26,7 +26,7 @@ pub fn ring_buf_test(ctx: ProbeContext) { Some(regs) => unsafe { &mut *regs }, None => return, }; - let mut entry = match pinned_ringbuf_reuse_test.reserve::(0) { + let mut entry = match RING_BUF.reserve::(0) { Some(entry) => entry, None => { *dropped += 1; diff --git a/test/integration-test/src/tests/ring_buf.rs b/test/integration-test/src/tests/ring_buf.rs index 036c0da2..5334a899 100644 --- a/test/integration-test/src/tests/ring_buf.rs +++ b/test/integration-test/src/tests/ring_buf.rs @@ -1,5 +1,7 @@ use std::{ - fs, mem, + fs, + io::ErrorKind, + mem, os::fd::AsRawFd as _, sync::{ Arc, @@ -13,7 +15,8 @@ use anyhow::Context as _; use assert_matches::assert_matches; use aya::{ Ebpf, EbpfLoader, - maps::{Map, MapData, array::PerCpuArray, ring_buf::RingBuf}, + maps::{MapData, array::PerCpuArray, ring_buf::RingBuf}, + pin::PinError, programs::UProbe, }; use aya_obj::generated::BPF_RINGBUF_HDR_SZ; @@ -82,12 +85,16 @@ impl PinnedRingBufTest { (RING_BUF_MAX_ENTRIES * (mem::size_of::() + BPF_RINGBUF_HDR_SZ as usize)) as u32; let mut bpf = EbpfLoader::new() - .set_max_entries("pinned_ringbuf_reuse_test", RING_BUF_BYTE_SIZE) - .load(crate::RING_BUF_PINNED) + .set_max_entries("RING_BUF", RING_BUF_BYTE_SIZE) + .load(crate::RING_BUF) .unwrap(); - // We assume the map has been pinned as part of the loading process. - let ring_buf = MapData::from_pin(RING_BUF_PIN_PATH).unwrap(); - let ring_buf = Map::RingBuf(ring_buf); + let ring_buf = bpf.take_map("RING_BUF").unwrap(); + match ring_buf.pin(RING_BUF_PIN_PATH) { + Ok(()) => {} + Err(PinError::SyscallError(err)) if err.io_error.kind() == ErrorKind::AlreadyExists => { + } + _ => assert!(false, "Pinning failed or pinned map not present"), + } let ring_buf = RingBuf::try_from(ring_buf).unwrap(); let regs = bpf.take_map("REGISTERS").unwrap(); let regs = PerCpuArray::<_, Registers>::try_from(regs).unwrap();