Skip to main content

DirCache

Struct DirCache 

Source
pub struct DirCache {
    entries: RwLock<HashMap<(u64, Vec<u8>), Arc<OwnedFd>>>,
    enabled: bool,
}
Expand description

O_PATH descriptors of canonical guest directories already walked, shared by every view of one supervisor.

Lets the walk skip the openat of an intermediate component, and pins the directory the component named when it was walked: a later lookup through the entry lands in that directory whatever the name now points to. Entries are keyed by the view they were resolved in, since the same guest path names different host directories in different views, and the whole cache is flushed by DirCache::flush after any syscall that may replace a directory, whichever view made it: the host directories are shared.

Fields§

§entries: RwLock<HashMap<(u64, Vec<u8>), Arc<OwnedFd>>>§enabled: bool

False when PROOT_NO_PATH_CACHE is set.

Implementations§

Source§

impl DirCache

Source

pub fn new() -> DirCache

Creates an empty cache, disabled when PROOT_NO_PATH_CACHE is set.

Source

pub fn flush(&self)

Forgets every cached directory of every view.

Call after mkdir, rmdir, rename, unlink, symlink, link, mknod or any other syscall that can turn a directory into something else (or the reverse); changes made from outside PRoot are not seen until then, and a lookup through a stale entry stays in the directory it pinned.

Trait Implementations§

Source§

impl Debug for DirCache

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for DirCache

Source§

fn default() -> Self

Returns the “default value” for a type. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.