The initial RVM layout of a coda server is simple:
boolean_t already_initialized;
struct VolHead VolumeList[MAXVOLS];
struct VnodeDiskObject *SmallVnodeFreeList[SMALLFREESIZE];
struct VnodeDiskObject *LargeVnodeFreeList[LARGEFREESIZE];
short SmallVnodeIndex;
short LargeVnodeIndex;
VolumeId MaxVolId;
long Reserved[MAXVOLS];
These fields are accessed through the CAMLIB_REC macro. The SmallVnodeIndex is the index of the highest pointer in the array, pointing to a free vnode.
The RVM layout is initialized in coda_init (recovc.cc) which allocates small and large vnodes in RVM for each of the entries in the free vnode list arrays. The vnodes are zeroed out.
The VolumeData structure has a pointer to the arrays: smallVnodeLists and largeVnodeLists.