The Coda FS Driver can cache results of lookup
and access
upcalls, to limit the frequency of upcalls. Upcalls carry a price
since a process context switch needs to take place. The counterpart
of caching the information is that Venus will notify the FS Driver
that cached entries must be flushed or renamed.
The kernel code generally has to maintain a structure which links the internal file handles (called vnodes in BSD, inodes in Linux and FileHandles in Windows) with the ViceFid's which Venus maintains. The reason is that frequent translations back and forth are needed in order to make upcalls and use the results of upcalls. Such linking objects are called cnodes.
The current minicache implementations have cache entries which record the following:
The lookup
call in the Coda FS Driver may request the cnode of
the desired object from the cache, by passing it's name, directory and
the CodaCred's of the caller. The cache will return the cnode or
indicate that it cannot be found. The Coda FS Driver must be careful
to invalidate cache entries when it modifies or removes objects.
When Venus obtains information that indicates that cache entries are no longer valid, it will make a downcall to the kernel. Downcalls are intercepted by the Coda FS Driver and lead to cache invalidations of the kind described below. The Coda FS Driver does not return an error unless the downcall data could not be read into kernel memory.
No information is available on this call.
Arguments None
Summary Flush the name cache entirely.
Description Venus issues this call upon startup and when it dies. This is to prevent stale cache information being held. Some operating systems allow the kernel name cache to be switched off dynamically. When this is done, this downcall is made.
Arguments
struct cfs_purgeuser_out {/* CFS_PURGEUSER is a venus->kernel call */ struct CodaCred cred; } cfs_purgeuser;
Description Remove all entries in the cache carrying the Cred. This call is issued when tokes for a user expire or are flushed.
Arguments
struct cfs_zapfile_out { /* CFS_ZAPFILE is a venus->kernel call */ ViceFid CodaFid; } cfs_zapfile;
Description Remove all entries which have the (dir vnode, name) pair. This is issued as a result of an invalidation of cached attributes of a vnode.
NOTE Call is not named correctly in NetBSD and Mach.
The minicache zapfile
routine takes different arguments. Linux
does not implement the invalidation of attributes correctly.
Arguments
struct cfs_zapdir_out { /* CFS_ZAPDIR is a venus->kernel call */ ViceFid CodaFid; } cfs_zapdir;
Description Remove all entries in the cache lying in a directory
CodaFid
, and all children of this directory. This call is issed
when Venus receives a callback on the directory.
Arguments
struct cfs_zapvnode_out { /* CFS_ZAPVNODE is a venus->kernel call */ struct CodaCred cred; ViceFid VFid; } cfs_zapvnode;
Description Remove all entries in the cache carrying the cred
and
VFid
as in the arguments. This downcall is probably never
issued.
Summary
Arguments
struct cfs_purgefid_out { /* CFS_PURGEFID is a venus->kernel call */ ViceFid CodaFid; } cfs_purgefid;
Description Flush the attribute for the file. If it is a dir (odd vnode), purge its children from the namecache remove the file from the namecache.
Summary Replace the Fid's for a collection of names.
Arguments
struct cfs_replace_out { /* cfs_replace is a venus->kernel call */ ViceFid NewFid; ViceFid OldFid; } cfs_replace;
Description This routine replaces a ViceFid in the name cache with another. It is added to allow Venus during reintegration to replace locally allocated temp fids while disconnected with global fids even when the reference count on those fids are not zero.
\newpage