diff --git a/aya/src/maps/mod.rs b/aya/src/maps/mod.rs index f5052ed5..163ce127 100644 --- a/aya/src/maps/mod.rs +++ b/aya/src/maps/mod.rs @@ -59,7 +59,7 @@ use std::{ }; use crate::util::KernelVersion; -use libc::{getrlimit, rlimit, RLIMIT_MEMLOCK, RLIM_INFINITY}; +use libc::{getrlimit, rlim_t, rlimit, RLIMIT_MEMLOCK, RLIM_INFINITY}; use log::warn; use thiserror::Error; @@ -198,20 +198,6 @@ impl AsFd for MapFd { } } -#[derive(PartialEq, Eq, PartialOrd, Ord)] -struct RlimitSize(usize); -impl fmt::Display for RlimitSize { - fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - if self.0 < 1024 { - write!(f, "{} bytes", self.0) - } else if self.0 < 1024 * 1024 { - write!(f, "{} KiB", self.0 / 1024) - } else { - write!(f, "{} MiB", self.0 / 1024 / 1024) - } - } -} - /// Raises a warning about rlimit. Should be used only if creating a map was not /// successful. fn maybe_warn_rlimit() { @@ -220,15 +206,28 @@ fn maybe_warn_rlimit() { if ret == 0 { let limit = unsafe { limit.assume_init() }; - let limit: RlimitSize = RlimitSize(limit.rlim_cur.try_into().unwrap()); - if limit.0 == RLIM_INFINITY.try_into().unwrap() { + if limit.rlim_cur == RLIM_INFINITY { return; } + struct HumanSize(rlim_t); + + impl fmt::Display for HumanSize { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + let &Self(size) = self; + if size < 1024 { + write!(f, "{} bytes", size) + } else if size < 1024 * 1024 { + write!(f, "{} KiB", size / 1024) + } else { + write!(f, "{} MiB", size / 1024 / 1024) + } + } + } warn!( - "RLIMIT_MEMLOCK value is {}, not RLIM_INFNITY; if experiencing problems with creating \ - maps, try raising RMILIT_MEMLOCK either to RLIM_INFINITY or to a higher value sufficient \ - for size of your maps", - limit + "RLIMIT_MEMLOCK value is {}, not RLIM_INFINITY; if experiencing problems with creating \ + maps, try raising RLIMIT_MEMLOCK either to RLIM_INFINITY or to a higher value sufficient \ + for the size of your maps", + HumanSize(limit.rlim_cur) ); } }