/* * format of cache on disk */ typedef struct Dptr Dptr; typedef struct Dahdr Dahdr; typedef struct Dalloc Dalloc; typedef struct Fphdr Fphdr; typedef struct Fptr Fptr; typedef struct Inode Inode; typedef struct Dihdr Dihdr; typedef struct Dinode Dinode; enum { Amagic= 0xbebeefed, /* allocation block magic */ Imagic= 0xbadc00ce, /* inode block magic */ BtoUL= 8*sizeof(ulong),/* bits in a ulong */ CACHENAMELEN= 128 }; #define Indbno 0x80000000 /* indirect block */ #define Notabno 0xFFFFFFFF /* not a block number */ /* * Allocation blocks at the begining of the disk. There are * enough of these blocks to supply 1 bit for each block on the * disk; */ struct Dahdr { ulong magic; ulong bsize; /* logical block size */ char name[CACHENAMELEN]; short nab; /* number of allocation blocks */ }; struct Dalloc { Dahdr; ulong bits[1]; }; /* * A pointer to disk data */ struct Dptr { ulong fbno; /* file block number */ ulong bno; /* disk block number */ ushort start; /* offset into block of valid data */ ushort end; /* offset into block after valid data */ }; /* * A file descriptor. */ struct Inode { Qid qid; vlong length; Dptr ptr; /* pointer page */ char inuse; }; /* * inode blocks (after allocation blocks) */ struct Dihdr { ulong magic; ulong nino; /* number of inodes */ }; struct Dinode { Dihdr; Inode inode[1]; };