Coda Distributed File System
Classes | Macros | Typedefs | Functions | Variables
cvnode.h File Reference
#include <lwp/lwp.h>
#include <lwp/lock.h>
#include <rpc2/errors.h>
#include <util.h>
#include <codadir.h>
#include <prs.h>
#include <al.h>
#include <coda_tsa.h>
#include <voltypes.h>
#include <inconsist.h>
#include <rec_smolist.h>
#include <rec_dlist.h>
#include "vicelock.h"
#include "lka.h"
Include dependency graph for cvnode.h:

Go to the source code of this file.

Classes

struct  VnodeClassInfo
 
struct  VnodeDiskObjectStruct
 
struct  Vnode
 

Macros

#define ROOTVNODE   1
 
#define TRY_READ_LOCK   16
 
#define TRY_WRITE_LOCK   32
 
#define vNull   0
 
#define vFile   1
 
#define vDirectory   2
 
#define vSymlink   3
 
#define vLarge   0
 
#define vSmall   1
 
#define VNODECLASSWIDTH   1
 
#define VNODECLASSMASK   ((1 << VNODECLASSWIDTH) - 1)
 
#define nVNODECLASSES   (VNODECLASSMASK + 1)
 
#define vnodeTypeToClass(type)   ((type) == vDirectory ? vLarge : vSmall)
 
#define vnodeIdToClass(vnodeId)   ((vnodeId - 1) & VNODECLASSMASK)
 
#define vnodeIdToBitNumber(v)   (((v) - 1) >> VNODECLASSWIDTH)
 
#define bitNumberToVnodeNumber(b, vclass)    (((b) << VNODECLASSWIDTH) + (vclass) + 1)
 
#define vnodeIsDirectory(vnodeNumber)   (vnodeIdToClass(vnodeNumber) == vLarge)
 
#define NEWVNODEINODE   ((PDirInode) - 1)
 
#define SMALLVNODEMAGIC   0xda8c041F
 
#define LARGEVNODEMAGIC   0xad8765fe
 
#define SIZEOF_SMALLDISKVNODE   112 /* used to be 64 */
 
#define CHECKSIZE_SMALLVNODE   (sizeof(VnodeDiskObject) == SIZEOF_SMALLDISKVNODE)
 
#define SIZEOF_LARGEDISKVNODE   512 /* used to be 256 */
 
#define Vnode_vv(vptr)   ((vptr)->disk.versionvector)
 
#define SIZEOF_LARGEVNODE    (sizeof(struct Vnode) - sizeof(VnodeDiskObject) + SIZEOF_LARGEDISKVNODE)
 
#define SIZEOF_SMALLVNODE   (sizeof(struct Vnode))
 
#define VVnodeDiskACL(v)
 
#define VVnodeACL(vnp)   (VVnodeDiskACL(&(vnp)->disk))
 
#define VAclSize(vnp)   (SIZEOF_LARGEVNODE - SIZEOF_SMALLVNODE)
 
#define VAclDiskSize(v)   (SIZEOF_LARGEDISKVNODE - SIZEOF_SMALLDISKVNODE)
 
#define VnLog(vnp)   ((vnp)->disk.log)
 
#define VnSHA(vnp)   ((vnp)->SHA)
 

Typedefs

typedef int VnodeType
 
typedef int VnodeClass
 
typedef struct VnodeDiskObjectStruct VnodeDiskObject
 
typedef struct Vnode Vnode
 

Functions

PDirHandle SetDirHandle (struct Vnode *)
 
int VolumeHashOffset ()
 
void VInitVnodes (VnodeClass, int)
 
VnodeVGetVnode (Error *, Volume *, VnodeId, Unique_t, int, int, int=0) REQUIRES_TRANSACTION
 
void VPutVnode (Error *ec, Vnode *vnp) REQUIRES_TRANSACTION
 
void VFlushVnode (Error *, Vnode *) REQUIRES_TRANSACTION
 
int VAllocFid (Volume *vp, VnodeType type, ViceFidRange *Range, int stride=1, int ix=0) EXCLUDES_TRANSACTION
 
int VAllocFid (Volume *vp, VnodeType type, VnodeId vnode, Unique_t unique) EXCLUDES_TRANSACTION
 
VnodeVAllocVnode (Error *ec, Volume *vp, VnodeType type, int stride=1, int ix=0) EXCLUDES_TRANSACTION
 
VnodeVAllocVnode (Error *ec, Volume *vp, VnodeType type, VnodeId vnode, Unique_t unique) EXCLUDES_TRANSACTION
 
int ObjectExists (int, int, VnodeId, Unique_t, ViceFid *=NULL)
 
int VN_DCommit (Vnode *vnp) REQUIRES_TRANSACTION
 
int VN_DAbort (Vnode *vnp)
 
PDirHandle VN_SetDirHandle (struct Vnode *vn)
 
void VN_PutDirHandle (struct Vnode *vn)
 
void VN_DropDirHandle (struct Vnode *vn)
 
void VN_CopyOnWrite (struct Vnode *vptr)
 
void VN_VN2Fid (struct Vnode *, struct Volume *, struct ViceFid *)
 
void VN_VN2PFid (struct Vnode *, struct Volume *, struct ViceFid *)
 
void PrintVnodeDiskObject (FILE *, VnodeDiskObject *, VnodeId)
 

Variables

struct VnodeClassInfo VnodeClassInfo_Array [nVNODECLASSES]
 

Macro Definition Documentation

◆ bitNumberToVnodeNumber

#define bitNumberToVnodeNumber (   b,
  vclass 
)     (((b) << VNODECLASSWIDTH) + (vclass) + 1)

◆ CHECKSIZE_SMALLVNODE

#define CHECKSIZE_SMALLVNODE   (sizeof(VnodeDiskObject) == SIZEOF_SMALLDISKVNODE)

◆ LARGEVNODEMAGIC

#define LARGEVNODEMAGIC   0xad8765fe

◆ NEWVNODEINODE

#define NEWVNODEINODE   ((PDirInode) - 1)

◆ nVNODECLASSES

#define nVNODECLASSES   (VNODECLASSMASK + 1)

◆ ROOTVNODE

#define ROOTVNODE   1

◆ SIZEOF_LARGEDISKVNODE

#define SIZEOF_LARGEDISKVNODE   512 /* used to be 256 */

◆ SIZEOF_LARGEVNODE

#define SIZEOF_LARGEVNODE    (sizeof(struct Vnode) - sizeof(VnodeDiskObject) + SIZEOF_LARGEDISKVNODE)

◆ SIZEOF_SMALLDISKVNODE

#define SIZEOF_SMALLDISKVNODE   112 /* used to be 64 */

◆ SIZEOF_SMALLVNODE

#define SIZEOF_SMALLVNODE   (sizeof(struct Vnode))

◆ SMALLVNODEMAGIC

#define SMALLVNODEMAGIC   0xda8c041F

◆ TRY_READ_LOCK

#define TRY_READ_LOCK   16

◆ TRY_WRITE_LOCK

#define TRY_WRITE_LOCK   32

◆ VAclDiskSize

#define VAclDiskSize (   v)    (SIZEOF_LARGEDISKVNODE - SIZEOF_SMALLDISKVNODE)

◆ VAclSize

#define VAclSize (   vnp)    (SIZEOF_LARGEVNODE - SIZEOF_SMALLVNODE)

◆ vDirectory

#define vDirectory   2

◆ vFile

#define vFile   1

◆ vLarge

#define vLarge   0

◆ VnLog

#define VnLog (   vnp)    ((vnp)->disk.log)

◆ Vnode_vv

#define Vnode_vv (   vptr)    ((vptr)->disk.versionvector)

◆ VNODECLASSMASK

#define VNODECLASSMASK   ((1 << VNODECLASSWIDTH) - 1)

◆ VNODECLASSWIDTH

#define VNODECLASSWIDTH   1

◆ vnodeIdToBitNumber

#define vnodeIdToBitNumber (   v)    (((v) - 1) >> VNODECLASSWIDTH)

◆ vnodeIdToClass

#define vnodeIdToClass (   vnodeId)    ((vnodeId - 1) & VNODECLASSMASK)

◆ vnodeIsDirectory

#define vnodeIsDirectory (   vnodeNumber)    (vnodeIdToClass(vnodeNumber) == vLarge)

◆ vnodeTypeToClass

#define vnodeTypeToClass (   type)    ((type) == vDirectory ? vLarge : vSmall)

◆ VnSHA

#define VnSHA (   vnp)    ((vnp)->SHA)

◆ vNull

#define vNull   0

◆ vSmall

#define vSmall   1

◆ vSymlink

#define vSymlink   3

◆ VVnodeACL

#define VVnodeACL (   vnp)    (VVnodeDiskACL(&(vnp)->disk))

◆ VVnodeDiskACL

#define VVnodeDiskACL (   v)
Value:
/* Only call this with large (dir) vnode!! */ \
((AL_AccessList *)(((byte *)(v)) + SIZEOF_SMALLDISKVNODE))
#define SIZEOF_SMALLDISKVNODE
Definition: cvnode.h:147
Definition: al.h:48

Typedef Documentation

◆ Vnode

typedef struct Vnode Vnode

◆ VnodeClass

typedef int VnodeClass

◆ VnodeDiskObject

◆ VnodeType

typedef int VnodeType

Function Documentation

◆ ObjectExists()

int ObjectExists ( int  volindex,
int  vclass,
VnodeId  vnodeindex,
Unique_t  u,
ViceFid *  ParentFid = NULL 
)

◆ PrintVnodeDiskObject()

void PrintVnodeDiskObject ( FILE *  outfile,
VnodeDiskObject vnode,
VnodeId  vnodeNumber 
)

◆ SetDirHandle()

PDirHandle SetDirHandle ( struct Vnode )

◆ VAllocFid() [1/2]

int VAllocFid ( Volume vp,
VnodeType  type,
ViceFidRange *  Range,
int  stride = 1,
int  ix = 0 
)

◆ VAllocFid() [2/2]

int VAllocFid ( Volume vp,
VnodeType  type,
VnodeId  vnode,
Unique_t  unique 
)

◆ VAllocVnode() [1/2]

Vnode * VAllocVnode ( Error ec,
Volume vp,
VnodeType  type,
int  stride = 1,
int  ix = 0 
)

◆ VAllocVnode() [2/2]

Vnode * VAllocVnode ( Error ec,
Volume vp,
VnodeType  type,
VnodeId  vnode,
Unique_t  unique 
)

◆ VFlushVnode()

void VFlushVnode ( Error ec,
Vnode vnp 
)

◆ VGetVnode()

Vnode * VGetVnode ( Error ec,
Volume vp,
VnodeId  vnodeNumber,
Unique_t  unq,
int  locktype,
int  ignoreIncon,
int  ignoreBarren = 0 
)

◆ VInitVnodes()

void VInitVnodes ( VnodeClass  vclass,
int  nVnodes 
)

◆ VN_CopyOnWrite()

void VN_CopyOnWrite ( struct Vnode vptr)

◆ VN_DAbort()

int VN_DAbort ( Vnode vnp)

◆ VN_DCommit()

int VN_DCommit ( Vnode vnp)

◆ VN_DropDirHandle()

void VN_DropDirHandle ( struct Vnode vn)

◆ VN_PutDirHandle()

void VN_PutDirHandle ( struct Vnode vn)

◆ VN_SetDirHandle()

PDirHandle VN_SetDirHandle ( struct Vnode vn)

◆ VN_VN2Fid()

void VN_VN2Fid ( struct Vnode vptr,
struct Volume volptr,
struct ViceFid *  fid 
)

◆ VN_VN2PFid()

void VN_VN2PFid ( struct Vnode vptr,
struct Volume volptr,
struct ViceFid *  fid 
)

◆ VolumeHashOffset()

int VolumeHashOffset ( )

◆ VPutVnode()

void VPutVnode ( Error ec,
Vnode vnp 
)

Variable Documentation

◆ VnodeClassInfo_Array

struct VnodeClassInfo VnodeClassInfo_Array[nVNODECLASSES]
extern