\begindata{text, 268919564}
\textdsversion{12}
\define{italic
menu:[Font,Italic]
attr:[FontFace Italic Int Set]}
\define{bold
menu:[Font,Bold]
attr:[FontFace Bold Int Set]}
\define{chapter
menu:[Title,Chapter]
attr:[Justification Centered Point 0]
attr:[FontSize PreviousFontSize Point 4]}
\define{section
menu:[Title,Section]
attr:[Justification Centered Point 0]
attr:[FontSize PreviousFontSize Point 4]}
\define{subsection
menu:[Title,Subsection]
attr:[Justification LeftJustified Point 0]
attr:[FontSize PreviousFontSize Point 4]}
\define{paragraph
menu:[Title,Paragraph]
attr:[Justification LeftJustified Point 0]
attr:[FontSize PreviousFontSize Point 4]}
\define{bigger
menu:[Font,Bigger]
attr:[FontSize PreviousFontSize Point 2]}
\define{indent
menu:[Region,Indent]
attr:[LeftMargin LeftMargin Inch 32768]
attr:[RightMargin RightMargin Inch 32768]}
\define{typewriter
menu:[Font,Typewriter]
attr:[FontFace FixedFace Int Set]
attr:[FontFamily AndyType Int 0]}
\define{display
menu:[Region,Display]
attr:[LeftMargin LeftMargin Inch 32768]
attr:[RightMargin RightMargin Inch 32768]
attr:[Justification LeftJustified Point 0]}
\define{example
menu:[Region,Example]
attr:[LeftMargin LeftMargin Inch 32768]
attr:[Justification LeftJustified Point 0]
attr:[FontFace FixedFace Int Set]
attr:[FontFamily AndyType Int 0]}
\define{description
menu:[Region,Description]
attr:[LeftMargin LeftMargin Inch 32768]
attr:[Indent LeftEdge Inch -32768]}
\define{quotation
menu:[Region,Quotation]
attr:[LeftMargin LeftMargin Inch 32768]
attr:[RightMargin RightMargin Inch 32768]
attr:[FontFace Italic Int Set]}
\define{subscript
menu:[Font,Subscript]
attr:[Script PreviousScriptMovement Point 131072]
attr:[FontSize PreviousFontSize Point -2]}
\define{superscript
menu:[Font,Superscript]
attr:[Script PreviousScriptMovement Point -393216]
attr:[FontSize PreviousFontSize Point -2]}
\define{smaller
menu:[Font,Smaller]
attr:[FontSize PreviousFontSize Point -2]}
\define{heading
menu:[Title,Heading]
attr:[LeftMargin LeftMargin Inch -13107]
attr:[Justification LeftJustified Point 0]
attr:[FontFace Bold Int Set]}
\define{majorheading
menu:[Title,MajorHeading]
attr:[Justification Centered Point 0]
attr:[FontSize PreviousFontSize Point 4]}
\define{formatnote
menu:[Region,FormatNote]
attr:[Flags PassThru Int Set]}
\define{subheading
menu:[Title,Subheading]
attr:[Justification LeftJustified Point 0]
attr:[FontFace Bold Int Set]}
\define{center
menu:[Justify,Center]
attr:[Justification Centered Point 0]}
\define{flushleft
menu:[Justify,FlushLeft]
attr:[Justification LeftJustified Point 0]}
\define{flushright
menu:[Justify,FlushRight]
attr:[Justification RightJustified Point 0]}
\define{leftindent
menu:[Region,LeftIndent]
attr:[LeftMargin LeftMargin Inch 32768]}
\define{article
menu:[Title,Article]
attr:[Justification Centered Point 0]
attr:[FontSize ConstantFontSize Point 24]}
\define{subpara
menu:[Title,Subpara]
attr:[Justification LeftJustified Point 0]
attr:[FontFace Bold Int Set]}
\define{subsubpara
menu:[Title,Subsubpara]
attr:[Justification LeftJustified Point 0]
attr:[FontFace Italic Int Set]}
\define{struct
menu:[Region,struct]
attr:[Justification LeftJustified Point 0]
attr:[FontFace FixedFace Int Set]
attr:[FontFamily AndyType Int 0]
attr:[FontSize PreviousFontSize Point -4]}
\define{boldtype
menu:[Font,BoldType]
attr:[FontFace Bold Int Set]
attr:[FontFace FixedFace Int Set]
attr:[FontFamily AndyType Int 0]}
\subsection{

Kernel Support

}

\paragraph{Overview}


The primary components of the Andrew File System, the Andrew File Manager and 
the Andrew Cache Manager are both written as user level code on top of BSD 
UNIX.  Several kernel modifications were required to support this code.  The 
modifications can be divided into two groups:  the inode access facilities 
allow both the cache and file managers to directly access inodes on a UNIX 
file system partition, without having to go through an expensive UNIX pathname 
lookup, and the system call interface "hooks" allow the cache manager to trap 
requests directed to the Andrew File System, while retaining object 
compatibility of executable programs.



\paragraph{Inode Access Facilities}


The inode access facilities, which are restricted to programs running with an 
effective userid of root, comprise the new system calls \italic{icreate(2v), 
iopen(2v), iread(2v), iwrite(2v),} and \italic{iinc/idec(2v)}, together with a 
modified version of the file system consistency check program, 
\italic{vfsck(8v)}.  These system calls allow UNIX inodes to be accessed 
independently of the UNIX file name space, resulting in very fast access to 
files.  The complete specifications for each call are found with the 
appropriate manual entry.


The \italic{icreate} call is used to allocate an inode on a specified disk 
partition.  Any inode so allocated will be subject to deletion by the standard 
file system consistency check program.  If \italic{icreate} is used, 
therefore, it is mandatory that \italic{vfsck} be used instead of the standard 
program.  Each inode is stamped with four user supplied parameters, which are 
used by the \italic{vol-salvage(8v)} program to verify the integrity of a file 
system built with inodes allocated in this manner.  Inodes allocated by 
icreate may be accessed by the system calls \italic{iopen, iread, iinc,} and 
\italic{idec.}


The \italic{iopen} call may be used to open an inode for reading or writing. 
 The inode must either have been allocated with \italic{icreate} or have a 
group id of -2.  The latter approach is used by the cache manager, the 
workstation component of the file system, to access files in its cache.  Each 
file exists in the file system with a known name but this name is not normally 
used for routine cache accesses.  \italic{Iopen} is the only call in this 
group that the Andrew Cache Manager uses.


\italic{Iread} and \italic{iwrite} may be used to read and write to inodes 
created by \italic{icreate} without having to maintain a file descriptor for 
the inodes.  In addition, this call is protected somewhat because the kernel 
requires one of the parameters in the inode to be supplied by the caller. 
 This is used by the file manager to prevent accidental inode writes to the 
wrong volume (the first parameter stamped in the inode is the Andrew File 
System volume number).


\italic{Iinc} and \italic{idec} allow the link count of an inode allocated by 
icreate to be raised or lowered.  This is used by the Andrew File Manager to 
implement cloned volumes--an inode that is used by two volumes will have a 
link count of two.  If the inode link counted is decremented to 0, the inode 
will be deallocated.


\italic{Vfsck} is the modified version of the standard file system consistency 
check program.  It is only necessary if icreate is used and the inodes 
allocated by icreate are expected to remain in the UNIX partition.  It is not 
needed on workstations, since the Andrew Cache Manager does not use icreate. 
 If \italic{vfsck} is used on an Andrew File System partition, then 
\italic{vol-salvage(8v)} should also be run.



\paragraph{System Call Intercept}


This section is obsolete.  The cache manager now uses the Sun VNODE interface.\
\enddata{text,268919564}
