The Pedigree Project 0.1
Classes | Public Types | Public Member Functions | Static Public Member Functions | Private Types | Private Member Functions | Private Attributes | Static Private Attributes | List of all members
VFS Class Reference

#include <VFS.h>

+ Collaboration diagram for VFS:

Classes

struct  ActiveInvocation
 
struct  CallbackState
 
class  FilesystemPin
 
struct  MountCallbackItem
 
class  MountIdentity
 
struct  MountInfo
 
class  MountOperation
 
struct  MountSnapshot
 
class  NamespaceMutation
 
struct  ProbeCallbackItem
 
struct  TrackedFile
 

Public Types

typedef void(* MountCallback) ()
 

Public Member Functions

uint64_t namespaceGeneration () const
 
VfsMountView * mountView () const
 
VfsMountView * bootMountView () const
 
bool shutdownMountView (Vector< Filesystem * > &ownedBackings)
 
bool initialiseMountView ()
 
bool acquireMount (Filesystem *key, MountOperation &operation) const
 
bool pinFilesystem (Filesystem *key, FilesystemPin &pin) const
 
bool diskMount (uint32_t id, MountIdentity &identity) const
 
bool snapshotDiskMounts (Vector< MountIdentity > &mounts) const
 
 VFS ()
 
 ~VFS ()
 
bool mount (Disk *pDisk, String &stableName, Filesystem **pMountedFs=nullptr)
 
String registerFilesystem (Filesystem *pFs, const String &preferredStableName)
 
bool unregisterFilesystem (Filesystem *pFs, bool canDelete=true, bool terminal=false)
 
bool retireOwnedFilesystem (Filesystem *filesystem)
 
bool removeDiskFilesystem (Filesystem *filesystem, bool deviceAvailable=false)
 
bool setRootFilesystem (Filesystem *pFs)
 
Filesystem * getRootFilesystem () const
 
bool getMountPath (Filesystem *pFs, String &path) const
 
Filesystem * getFilesystemAt (const String &path) const
 
void getMounts (Vector< MountSnapshot > &mounts) const
 
Filesystem::SyncStatus syncFilesystem (Filesystem *key)
 
Filesystem::SyncStatus syncAll ()
 
bool removeEphemeralFiles ()
 
File * find (const String &path, File *pStartNode=0)
 
File * findRetained (const String &path, Directory::ChildLease &result, File *pStartNode=nullptr)
 
bool createFile (const String &path, uint32_t mask, File *pStartNode=0)
 
bool createDirectory (const String &path, uint32_t mask, File *pStartNode=0)
 
bool createSymlink (const String &path, const String &value, File *pStartNode=0)
 
bool createLink (const String &path, File *target, File *pStartNode=0)
 
bool remove (const String &path, File *pStartNode=0)
 
bool remove (const String &path, File *pStartNode, File *expected)
 
bool rename (const String &oldPath, File *oldStart, const String &newPath, File *newStart, bool noReplace=false)
 
void addProbeCallback (Filesystem::ProbeCallback callback)
 
bool removeProbeCallback (Filesystem::ProbeCallback callback)
 
void addMountCallback (MountCallback callback)
 
bool removeMountCallback (MountCallback callback)
 
void trackFile (File *pFile)
 Track a File object that exists. It is necessary to keep track of File objects, or at least those that are stored in Directory caches and Filesystem objects, such that they can be correctly tidied up when no more usages exist.
 
bool tryTrackFile (File *pFile)
 
MUST_USE_RESULT bool retainTrackedFile (File *pFile)
 
bool untrackFile (File *pFile, bool destroy=true)
 

Static Public Member Functions

static Module::UnloadAdmission unloadAdmission (bool terminal)
 
static VFS & instance ()
 
static bool checkAccess (File *pFile, bool bRead, bool bWrite, bool bExecute)
 
static bool checkAccess (File *file, bool read, bool write, bool execute, const FilesystemCredentials &credentials)
 
static bool checkAccess (File *pFile, bool bRead, bool bWrite, bool bExecute, int64_t userId, int64_t groupId, const Vector< int64_t > &supplementalGroups)
 

Private Types

typedef Tree< Filesystem *, MountInfo * > MountTable
 

Private Member Functions

RcuPointer< TrackedFile > & trackedFileBucket (File *file)
 
bool trackFileLocked (File *file)
 
ProbeCallbackItem * acquireProbeCallback (size_t &afterSequence, size_t boundary, ActiveInvocation &invocation)
 
MountCallbackItem * acquireMountCallback (size_t &afterSequence, size_t boundary, ActiveInvocation &invocation)
 
void finishCallback (CallbackState *state, ActiveInvocation &invocation)
 
void drainProbeCallback (ProbeCallbackItem *item)
 
void drainMountCallback (MountCallbackItem *item)
 
void dispatchMountCallbacks (void *owner)
 
bool isCallbackInvocation (void *owner) const
 
File * resolveStartNode (const String &path, File *pStartNode)
 
String registerFilesystemLocked (Filesystem *pFs, const String &preferredStableName)
 
String getUniqueStableNameLocked (const String &preferredName) const
 
bool attachFilesystem (Filesystem *pRootFs, Filesystem *pFs, const String &path)
 
void attachRegisteredFilesystemsLocked ()
 
void getMountsLocked (Vector< MountSnapshot > &mounts) const
 

Private Attributes

Mutex m_PathMutationLock
 
uint64_t m_PathGeneration
 
VfsMountView * m_MountView
 
Mutex m_MountMutationLock
 
Mutex m_MountTableLock
 
Filesystem * m_pRootFilesystem
 
MountTable m_Mounts
 
List< ProbeCallbackItem * > m_ProbeCallbacks
 
List< MountCallbackItem * > m_MountCallbacks
 
Spinlock m_CallbackLock
 
size_t m_NextCallbackSequence
 
ActiveInvocation * m_pActiveCallbacks
 
bool m_CallbacksClosing
 
LruCache< String, File * > m_FindCache
 
Mutex m_TrackedFilesLock
 
RcuPointer< TrackedFile > m_TrackedFiles [TrackedFileBuckets]
 

Static Private Attributes

static constexpr size_t TrackedFileBuckets = 256
 
static VFS m_Instance
 
static File * m_EmptyFile
 

Detailed Description

Set to zero to disable the builtin VFS LRU caches. This class implements a single-root virtual filesystem namespace.

Definition at line 58 of file VFS.h.

Member Typedef Documentation

◆ MountCallback

typedef void(* VFS::MountCallback) ()

Callback type, called when a disk is mounted or unmounted.

Definition at line 190 of file VFS.h.

◆ MountTable

Definition at line 369 of file VFS.h.

Constructor & Destructor Documentation

◆ VFS()

VFS::VFS ( )

Constructor

Definition at line 315 of file VFS.cc.

◆ ~VFS()

VFS::~VFS ( )

Member Function Documentation

◆ acquireMount()

bool VFS::acquireMount ( Filesystem *  key,
MountOperation &  operation 
) const

Compares key without dereferencing it, then admits live filesystem access.

Definition at line 290 of file VFS.cc.

References Tree< K, E >::lookup().

◆ acquireMountCallback()

VFS::MountCallbackItem * VFS::acquireMountCallback ( size_t &  afterSequence,
size_t  boundary,
ActiveInvocation &  invocation 
)
private

Definition at line 1283 of file VFS.cc.

◆ acquireProbeCallback()

VFS::ProbeCallbackItem * VFS::acquireProbeCallback ( size_t &  afterSequence,
size_t  boundary,
ActiveInvocation &  invocation 
)
private

Definition at line 1253 of file VFS.cc.

◆ addMountCallback()

void VFS::addMountCallback ( MountCallback  callback)

Adds a mount callback - the function is called when a disk is mounted or unmounted. Duplicate registration is idempotent and revives an entry closed by a deferred removal which has no external drainer.

Definition at line 1151 of file VFS.cc.

References Spinlock::acquire(), and Spinlock::release().

◆ addProbeCallback()

void VFS::addProbeCallback ( Filesystem::ProbeCallback  callback)

Adds a filesystem probe callback - this is called when a device is mounted. Duplicate registration is idempotent and revives an entry closed by a deferred removal which has no external drainer.

Definition at line 1050 of file VFS.cc.

References Spinlock::acquire(), and Spinlock::release().

◆ attachFilesystem()

bool VFS::attachFilesystem ( Filesystem *  pRootFs,
Filesystem *  pFs,
const String &  path 
)
private

Definition at line 1791 of file VFS.cc.

◆ attachRegisteredFilesystemsLocked()

void VFS::attachRegisteredFilesystemsLocked ( )
private

Definition at line 1857 of file VFS.cc.

◆ bootMountView()

VfsMountView * VFS::bootMountView ( ) const

Definition at line 37 of file VFS-mount-view.cc.

◆ checkAccess() [1/3]

bool VFS::checkAccess ( File *  file,
bool  read,
bool  write,
bool  execute,
const FilesystemCredentials &  credentials 
)
static

Definition at line 1539 of file VFS.cc.

◆ checkAccess() [2/3]

bool VFS::checkAccess ( File *  pFile,
bool  bRead,
bool  bWrite,
bool  bExecute 
)
static

Checks if the current user can access the given file.

Definition at line 1502 of file VFS.cc.

References checkAccess().

Referenced by UnixSocketSyscalls::bind(), checkAccess(), checkAccess(), Filesystem::createDirectory(), Filesystem::createFile(), Filesystem::createLink(), Filesystem::createSymlink(), Filesystem::findNode(), PosixSubsystem::invoke(), and Filesystem::remove().

+ Here is the caller graph for this function:

◆ checkAccess() [3/3]

bool VFS::checkAccess ( File *  pFile,
bool  bRead,
bool  bWrite,
bool  bExecute,
int64_t  userId,
int64_t  groupId,
const Vector< int64_t > &  supplementalGroups 
)
static

Checks access using an explicit, immutable credential snapshot.

Definition at line 1521 of file VFS.cc.

References checkAccess(), and Vector< T >::count().

◆ createDirectory()

bool VFS::createDirectory ( const String &  path,
uint32_t  mask,
File *  pStartNode = 0 
)

Attempts to create a directory.

Definition at line 1464 of file VFS.cc.

References Filesystem::createDirectory().

◆ createFile()

bool VFS::createFile ( const String &  path,
uint32_t  mask,
File *  pStartNode = 0 
)

Attempts to create a file.

Definition at line 1459 of file VFS.cc.

References Filesystem::createFile().

◆ createLink()

bool VFS::createLink ( const String &  path,
File *  target,
File *  pStartNode = 0 
)

Attempts to create a hard link.

Definition at line 1479 of file VFS.cc.

References Filesystem::createLink().

◆ createSymlink()

bool VFS::createSymlink ( const String &  path,
const String &  value,
File *  pStartNode = 0 
)

Attempts to create a symlink.

Definition at line 1474 of file VFS.cc.

References Filesystem::createSymlink().

◆ diskMount()

bool VFS::diskMount ( uint32_t  id,
MountIdentity &  identity 
) const

Definition at line 1913 of file VFS.cc.

◆ dispatchMountCallbacks()

void VFS::dispatchMountCallbacks ( void *  owner)
private

Definition at line 1429 of file VFS.cc.

◆ drainMountCallback()

void VFS::drainMountCallback ( MountCallbackItem *  item)
private

Definition at line 1385 of file VFS.cc.

◆ drainProbeCallback()

void VFS::drainProbeCallback ( ProbeCallbackItem *  item)
private

Definition at line 1341 of file VFS.cc.

◆ find()

File * VFS::find ( const String &  path,
File *  pStartNode = 0 
)

Attempts to obtain a File for a specific path.

Definition at line 1023 of file VFS.cc.

References Filesystem::find(), and String::view().

Referenced by ProcFs::initialise().

+ Here is the caller graph for this function:

◆ findRetained()

File * VFS::findRetained ( const String &  path,
Directory::ChildLease &  result,
File *  pStartNode = nullptr 
)

Find a File while retaining its VFS lifetime in result.

Definition at line 1042 of file VFS.cc.

References Filesystem::findRetained(), and String::view().

Referenced by Symlink::followLinkRetained(), DynamicLinker::loadObject(), DynamicLinker::loadProgram(), removeDiskFilesystem(), and unregisterFilesystem().

+ Here is the caller graph for this function:

◆ finishCallback()

void VFS::finishCallback ( CallbackState *  state,
ActiveInvocation &  invocation 
)
private

Definition at line 1313 of file VFS.cc.

◆ getFilesystemAt()

Filesystem * VFS::getFilesystemAt ( const String &  path) const

Find the filesystem mounted at an exact absolute path. The returned pointer is borrowed and is not pinned against unregistration.

Definition at line 843 of file VFS.cc.

References Tree< K, E >::begin(), and Tree< K, E >::end().

◆ getMountPath()

bool VFS::getMountPath ( Filesystem *  pFs,
String &  path 
) const

Obtain the canonical mount path for a filesystem.

Definition at line 832 of file VFS.cc.

References Tree< K, E >::lookup().

Referenced by mount().

+ Here is the caller graph for this function:

◆ getMounts()

void VFS::getMounts ( Vector< MountSnapshot > &  mounts) const

Copies a detached snapshot of all mounted filesystems.

Definition at line 854 of file VFS.cc.

◆ getMountsLocked()

void VFS::getMountsLocked ( Vector< MountSnapshot > &  mounts) const
private

Definition at line 859 of file VFS.cc.

◆ getRootFilesystem()

Filesystem * VFS::getRootFilesystem ( ) const

Returns a borrowed pointer; the lookup does not pin filesystem lifetime.

Definition at line 742 of file VFS.cc.

Referenced by mount(), removeDiskFilesystem(), and MountService::serve().

+ Here is the caller graph for this function:

◆ getUniqueStableNameLocked()

String VFS::getUniqueStableNameLocked ( const String &  preferredName) const
private

Definition at line 1738 of file VFS.cc.

◆ initialiseMountView()

bool VFS::initialiseMountView ( )

Definition at line 50 of file VFS-mount-view.cc.

◆ instance()

VFS & VFS::instance ( )
static

◆ isCallbackInvocation()

bool VFS::isCallbackInvocation ( void *  owner) const
private

Definition at line 1448 of file VFS.cc.

◆ mount()

bool VFS::mount ( Disk *  pDisk,
String &  stableName,
Filesystem **  pMountedFs = nullptr 
)

Probe and register a filesystem backed by a disk.

Definition at line 419 of file VFS.cc.

References Spinlock::acquire(), getMountPath(), getRootFilesystem(), Filesystem::getVolumeLabel(), ProcessorBase::information(), registerFilesystem(), Spinlock::release(), and unregisterFilesystem().

Referenced by removeEphemeralFiles().

+ Here is the caller graph for this function:

◆ mountView()

VfsMountView * VFS::mountView ( ) const

Definition at line 25 of file VFS-mount-view.cc.

◆ namespaceGeneration()

uint64_t VFS::namespaceGeneration ( ) const

Odd while a namespace writer owns admission; readers never hold it for I/O.

Definition at line 22 of file VFS-mount-view.cc.

◆ pinFilesystem()

bool VFS::pinFilesystem ( Filesystem *  key,
FilesystemPin &  pin 
) const

Definition at line 189 of file VFS.cc.

◆ registerFilesystem()

String VFS::registerFilesystem ( Filesystem *  pFs,
const String &  preferredStableName 
)

Register a filesystem for mounting under /media/<stable-name>.

Definition at line 534 of file VFS.cc.

Referenced by mount().

+ Here is the caller graph for this function:

◆ registerFilesystemLocked()

String VFS::registerFilesystemLocked ( Filesystem *  pFs,
const String &  preferredStableName 
)
private

Definition at line 539 of file VFS.cc.

◆ remove() [1/2]

bool VFS::remove ( const String &  path,
File *  pStartNode,
File *  expected 
)

Remove a path only if its terminal entry still has the expected identity.

Definition at line 1488 of file VFS.cc.

References Filesystem::remove().

◆ remove() [2/2]

bool VFS::remove ( const String &  path,
File *  pStartNode = 0 
)

Attempts to remove a file/directory/symlink. WILL FAIL IF DIRECTORY NOT EMPTY

Definition at line 1484 of file VFS.cc.

References remove().

Referenced by remove().

+ Here is the caller graph for this function:

◆ removeDiskFilesystem()

bool VFS::removeDiskFilesystem ( Filesystem *  filesystem,
bool  deviceAvailable = false 
)

◆ removeEphemeralFiles()

bool VFS::removeEphemeralFiles ( )

Retire transient names before their providers unload; namespace writers must be stopped.

Definition at line 1000 of file VFS.cc.

References Tree< K, E >::begin(), Tree< K, E >::end(), Directory::fromFile(), Filesystem::getRoot(), File::isDirectory(), mount(), Vector< T >::pushBack(), and Directory::removeEphemeralFiles().

◆ removeMountCallback()

bool VFS::removeMountCallback ( MountCallback  callback)

Removes a mount callback before its implementation unloads.

Definition at line 1194 of file VFS.cc.

References Spinlock::acquire(), ProcessorBase::executionContext(), ProcessorBase::information(), and Spinlock::release().

◆ removeProbeCallback()

bool VFS::removeProbeCallback ( Filesystem::ProbeCallback  callback)

Removes a filesystem probe callback before its implementation unloads.

Definition at line 1093 of file VFS.cc.

References Spinlock::acquire(), ProcessorBase::executionContext(), ProcessorBase::information(), and Spinlock::release().

◆ rename()

bool VFS::rename ( const String &  oldPath,
File *  oldStart,
const String &  newPath,
File *  newStart,
bool  noReplace = false 
)

Definition at line 1493 of file VFS.cc.

◆ resolveStartNode()

File * VFS::resolveStartNode ( const String &  path,
File *  pStartNode 
)
private

Definition at line 1778 of file VFS.cc.

◆ retainTrackedFile()

bool VFS::retainTrackedFile ( File *  pFile)

Retain an already tracked File without publishing an untracked pointer.

Definition at line 1640 of file VFS.cc.

Referenced by Filesystem::findParent(), Directory::lookupChildAt(), Directory::removeEphemeralFiles(), and File::retainVfsReference().

+ Here is the caller graph for this function:

◆ retireOwnedFilesystem()

bool VFS::retireOwnedFilesystem ( Filesystem *  filesystem)

Surrenders an attachment-owned registration. Existing admissions drain asynchronously; the last release deletes the backend outside VFS locks.

Definition at line 629 of file VFS.cc.

References OperationBarrier::close(), Tree< K, E >::lookup(), and Tree< K, E >::take().

◆ setRootFilesystem()

bool VFS::setRootFilesystem ( Filesystem *  pFs)

Select the filesystem that supplies the root namespace.

Definition at line 716 of file VFS.cc.

References Filesystem::getVolumeLabel(), and Tree< K, E >::lookup().

◆ shutdownMountView()

bool VFS::shutdownMountView ( Vector< Filesystem * > &  ownedBackings)

Terminal-only: detach a drained namespace and return attachment-owned backends.

Definition at line 40 of file VFS-mount-view.cc.

◆ snapshotDiskMounts()

bool VFS::snapshotDiskMounts ( Vector< MountIdentity > &  mounts) const

Definition at line 1927 of file VFS.cc.

◆ syncAll()

Filesystem::SyncStatus VFS::syncAll ( )

Pins all registered filesystems, attempts each, and returns the first error.

Definition at line 939 of file VFS.cc.

References Tree< K, E >::begin(), Tree< K, E >::count(), Dec, and Tree< K, E >::end().

◆ syncFilesystem()

Filesystem::SyncStatus VFS::syncFilesystem ( Filesystem *  key)

Pins one registered backing filesystem before calling its sync operation.

Definition at line 918 of file VFS.cc.

References Tree< K, E >::lookup(), and SharedPointer< T >::tryAllocate().

◆ trackedFileBucket()

RcuPointer< VFS::TrackedFile > & VFS::trackedFileBucket ( File *  file)
private

Definition at line 1598 of file VFS.cc.

◆ trackFile()

void VFS::trackFile ( File *  pFile)

Track a File object that exists. It is necessary to keep track of File objects, or at least those that are stored in Directory caches and Filesystem objects, such that they can be correctly tidied up when no more usages exist.

It is almost never safe to directly delete a File pointer so this helps maintain that safety.

Definition at line 1625 of file VFS.cc.

Referenced by Directory::addCachedDirectoryEntry(), Directory::addDirectoryEntry(), Directory::addEphemeralFile(), UnixSocketSyscalls::bind(), SysFs::initialise(), DevFs::initialise(), and PtmxFile::open().

+ Here is the caller graph for this function:

◆ trackFileLocked()

bool VFS::trackFileLocked ( File *  file)
private

Definition at line 1605 of file VFS.cc.

◆ tryTrackFile()

bool VFS::tryTrackFile ( File *  pFile)

Fallible initial publication; success owns one additional tracked reference.

Definition at line 1632 of file VFS.cc.

◆ unloadAdmission()

Module::UnloadAdmission VFS::unloadAdmission ( bool  terminal)
static

Definition at line 1895 of file VFS.cc.

◆ unregisterFilesystem()

bool VFS::unregisterFilesystem ( Filesystem *  pFs,
bool  canDelete = true,
bool  terminal = false 
)

Remove a registered filesystem and optionally destroy it. When canDelete is true, the caller must provide exclusive ownership; success consumes the pointer, while false leaves it unconsumed. When canDelete is false, ownership always remains external. Live FilesystemPins reject unregistration without changing publication or closing admission.

Definition at line 580 of file VFS.cc.

References findRetained(), Directory::fromFile(), Filesystem::getVolumeLabel(), File::isDirectory(), Tree< K, E >::lookup(), Directory::setReparsePoint(), Filesystem::shutdown(), and Tree< K, E >::take().

Referenced by mount().

+ Here is the caller graph for this function:

◆ untrackFile()

bool VFS::untrackFile ( File *  pFile,
bool  destroy = true 
)

Stop tracking a File object, destroying by default if it is no longer tracked by any other owners.

Returns
true if the File object was deleted (or would have been, if destroy == false)

Definition at line 1670 of file VFS.cc.

Referenced by Filesystem::findParent(), File::releaseVfsReference(), Directory::removeEphemeralFiles(), and File::~File().

+ Here is the caller graph for this function:

Member Data Documentation

◆ m_CallbackLock

Spinlock VFS::m_CallbackLock
private

Definition at line 441 of file VFS.h.

◆ m_CallbacksClosing

bool VFS::m_CallbacksClosing
private

Definition at line 444 of file VFS.h.

◆ m_EmptyFile

File* VFS::m_EmptyFile
staticprivate

A static File object representing an invalid file

Definition at line 426 of file VFS.h.

◆ m_FindCache

LruCache<String, File*> VFS::m_FindCache
private

Definition at line 447 of file VFS.h.

◆ m_Instance

VFS VFS::m_Instance
staticprivate

The static instance object.

Todo:
Figure out a way to clean up files after deletion. Directory::remove() is not the right place to do this. There needs to be a way to add a File to some sort of queue that cleans it up once it hits refcount zero or something like that.

Definition at line 423 of file VFS.h.

Referenced by instance().

◆ m_MountCallbacks

List<MountCallbackItem*> VFS::m_MountCallbacks
private

Definition at line 438 of file VFS.h.

◆ m_MountMutationLock

Mutex VFS::m_MountMutationLock
mutableprivate

Definition at line 431 of file VFS.h.

◆ m_Mounts

MountTable VFS::m_Mounts
private

Definition at line 435 of file VFS.h.

◆ m_MountTableLock

Mutex VFS::m_MountTableLock
mutableprivate

Definition at line 432 of file VFS.h.

◆ m_MountView

VfsMountView* VFS::m_MountView
private

Definition at line 430 of file VFS.h.

◆ m_NextCallbackSequence

size_t VFS::m_NextCallbackSequence
private

Definition at line 442 of file VFS.h.

◆ m_pActiveCallbacks

ActiveInvocation* VFS::m_pActiveCallbacks
private

Definition at line 443 of file VFS.h.

◆ m_PathGeneration

uint64_t VFS::m_PathGeneration
private

Definition at line 429 of file VFS.h.

◆ m_PathMutationLock

Mutex VFS::m_PathMutationLock
mutableprivate

Definition at line 428 of file VFS.h.

◆ m_ProbeCallbacks

List<ProbeCallbackItem*> VFS::m_ProbeCallbacks
private

Definition at line 437 of file VFS.h.

◆ m_pRootFilesystem

Filesystem* VFS::m_pRootFilesystem
private

Definition at line 434 of file VFS.h.

◆ m_TrackedFiles

RcuPointer<TrackedFile> VFS::m_TrackedFiles[TrackedFileBuckets]
private

Definition at line 450 of file VFS.h.

◆ m_TrackedFilesLock

Mutex VFS::m_TrackedFilesLock
private

Definition at line 449 of file VFS.h.

◆ TrackedFileBuckets

constexpr size_t VFS::TrackedFileBuckets = 256
staticconstexprprivate

Definition at line 355 of file VFS.h.


The documentation for this class was generated from the following files: