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: boolFalse when PROOT_NO_PATH_CACHE is set.
Implementations§
Source§impl DirCache
impl DirCache
Sourcepub fn flush(&self)
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.