|
@@ -409,8 +409,6 @@ pub(crate) fn check_v_size<V>(map: &MapData) -> Result<(), MapError> {
|
|
|
pub struct MapData {
|
|
|
obj: obj::Map,
|
|
|
fd: MapFd,
|
|
|
- /// Indicates if this map has been pinned to bpffs
|
|
|
- pub pinned: bool,
|
|
|
}
|
|
|
|
|
|
impl MapData {
|
|
@@ -439,11 +437,7 @@ impl MapData {
|
|
|
}
|
|
|
})?;
|
|
|
let fd = MapFd(fd);
|
|
|
- Ok(Self {
|
|
|
- obj,
|
|
|
- fd,
|
|
|
- pinned: false,
|
|
|
- })
|
|
|
+ Ok(Self { obj, fd })
|
|
|
}
|
|
|
|
|
|
pub(crate) fn create_pinned<P: AsRef<Path>>(
|
|
@@ -471,11 +465,7 @@ impl MapData {
|
|
|
}) {
|
|
|
Ok(fd) => {
|
|
|
let fd = MapFd(fd);
|
|
|
- Ok(Self {
|
|
|
- obj,
|
|
|
- fd,
|
|
|
- pinned: false,
|
|
|
- })
|
|
|
+ Ok(Self { obj, fd })
|
|
|
}
|
|
|
Err(_) => {
|
|
|
let mut map = Self::create(obj, name, btf_fd)?;
|
|
@@ -489,7 +479,7 @@ impl MapData {
|
|
|
}
|
|
|
|
|
|
pub(crate) fn finalize(&mut self) -> Result<(), MapError> {
|
|
|
- let Self { obj, fd, pinned: _ } = self;
|
|
|
+ let Self { obj, fd } = self;
|
|
|
if !obj.data().is_empty() && obj.section_kind() != BpfSectionKind::Bss {
|
|
|
bpf_map_update_elem_ptr(fd.as_fd(), &0 as *const _, obj.data_mut().as_mut_ptr(), 0)
|
|
|
.map_err(|(_, io_error)| SyscallError {
|
|
@@ -534,7 +524,6 @@ impl MapData {
|
|
|
Ok(Self {
|
|
|
obj: parse_map_info(info, PinningType::ByName),
|
|
|
fd,
|
|
|
- pinned: true,
|
|
|
})
|
|
|
}
|
|
|
|
|
@@ -550,44 +539,35 @@ impl MapData {
|
|
|
Ok(Self {
|
|
|
obj: parse_map_info(info, PinningType::None),
|
|
|
fd,
|
|
|
- pinned: false,
|
|
|
})
|
|
|
}
|
|
|
|
|
|
pub(crate) fn pin<P: AsRef<Path>>(&mut self, name: &str, path: P) -> Result<(), PinError> {
|
|
|
use std::os::unix::ffi::OsStrExt as _;
|
|
|
|
|
|
- let Self { fd, pinned, obj: _ } = self;
|
|
|
- if *pinned {
|
|
|
- return Err(PinError::AlreadyPinned { name: name.into() });
|
|
|
- }
|
|
|
+ let Self { fd, obj: _ } = self;
|
|
|
let path = path.as_ref().join(name);
|
|
|
- let path_string = CString::new(path.as_os_str().as_bytes())
|
|
|
- .map_err(|error| PinError::InvalidPinPath { path, error })?;
|
|
|
+ let path_string = CString::new(path.as_os_str().as_bytes()).map_err(|error| {
|
|
|
+ PinError::InvalidPinPath {
|
|
|
+ path: path.clone(),
|
|
|
+ error,
|
|
|
+ }
|
|
|
+ })?;
|
|
|
bpf_pin_object(fd.as_fd(), &path_string).map_err(|(_, io_error)| SyscallError {
|
|
|
call: "BPF_OBJ_PIN",
|
|
|
io_error,
|
|
|
})?;
|
|
|
- *pinned = true;
|
|
|
Ok(())
|
|
|
}
|
|
|
|
|
|
/// Returns the file descriptor of the map.
|
|
|
pub fn fd(&self) -> &MapFd {
|
|
|
- let Self {
|
|
|
- obj: _,
|
|
|
- fd,
|
|
|
- pinned: _,
|
|
|
- } = self;
|
|
|
+ let Self { obj: _, fd } = self;
|
|
|
fd
|
|
|
}
|
|
|
|
|
|
pub(crate) fn obj(&self) -> &obj::Map {
|
|
|
- let Self {
|
|
|
- obj,
|
|
|
- fd: _,
|
|
|
- pinned: _,
|
|
|
- } = self;
|
|
|
+ let Self { obj, fd: _ } = self;
|
|
|
obj
|
|
|
}
|
|
|
}
|
|
@@ -825,7 +805,6 @@ mod tests {
|
|
|
Ok(MapData {
|
|
|
obj: _,
|
|
|
fd,
|
|
|
- pinned: false
|
|
|
}) => assert_eq!(fd.as_fd().as_raw_fd(), 42)
|
|
|
);
|
|
|
}
|