1*206fef1cSDavid du Colombier /* 2*206fef1cSDavid du Colombier * format of cache on disk 3*206fef1cSDavid du Colombier */ 4*206fef1cSDavid du Colombier typedef struct Dptr Dptr; 5*206fef1cSDavid du Colombier typedef struct Dahdr Dahdr; 6*206fef1cSDavid du Colombier typedef struct Dalloc Dalloc; 7*206fef1cSDavid du Colombier typedef struct Fphdr Fphdr; 8*206fef1cSDavid du Colombier typedef struct Fptr Fptr; 9*206fef1cSDavid du Colombier typedef struct Inode Inode; 10*206fef1cSDavid du Colombier typedef struct Dihdr Dihdr; 11*206fef1cSDavid du Colombier typedef struct Dinode Dinode; 12*206fef1cSDavid du Colombier 13*206fef1cSDavid du Colombier enum 14*206fef1cSDavid du Colombier { 15*206fef1cSDavid du Colombier Amagic= 0xbebeefed, /* allocation block magic */ 16*206fef1cSDavid du Colombier Imagic= 0xbadc00ce, /* inode block magic */ 17*206fef1cSDavid du Colombier BtoUL= 8*sizeof(ulong),/* bits in a ulong */ 18*206fef1cSDavid du Colombier CACHENAMELEN= 128 19*206fef1cSDavid du Colombier }; 20*206fef1cSDavid du Colombier #define Indbno 0x80000000 /* indirect block */ 21*206fef1cSDavid du Colombier #define Notabno 0xFFFFFFFF /* not a block number */ 22*206fef1cSDavid du Colombier 23*206fef1cSDavid du Colombier /* 24*206fef1cSDavid du Colombier * Allocation blocks at the begining of the disk. There are 25*206fef1cSDavid du Colombier * enough of these blocks to supply 1 bit for each block on the 26*206fef1cSDavid du Colombier * disk; 27*206fef1cSDavid du Colombier */ 28*206fef1cSDavid du Colombier struct Dahdr 29*206fef1cSDavid du Colombier { 30*206fef1cSDavid du Colombier ulong magic; 31*206fef1cSDavid du Colombier ulong bsize; /* logical block size */ 32*206fef1cSDavid du Colombier char name[CACHENAMELEN]; 33*206fef1cSDavid du Colombier short nab; /* number of allocation blocks */ 34*206fef1cSDavid du Colombier }; 35*206fef1cSDavid du Colombier struct Dalloc 36*206fef1cSDavid du Colombier { 37*206fef1cSDavid du Colombier Dahdr; 38*206fef1cSDavid du Colombier ulong bits[1]; 39*206fef1cSDavid du Colombier }; 40*206fef1cSDavid du Colombier 41*206fef1cSDavid du Colombier /* 42*206fef1cSDavid du Colombier * A pointer to disk data 43*206fef1cSDavid du Colombier */ 44*206fef1cSDavid du Colombier struct Dptr 45*206fef1cSDavid du Colombier { 46*206fef1cSDavid du Colombier ulong fbno; /* file block number */ 47*206fef1cSDavid du Colombier ulong bno; /* disk block number */ 48*206fef1cSDavid du Colombier ushort start; /* offset into block of valid data */ 49*206fef1cSDavid du Colombier ushort end; /* offset into block after valid data */ 50*206fef1cSDavid du Colombier }; 51*206fef1cSDavid du Colombier 52*206fef1cSDavid du Colombier /* 53*206fef1cSDavid du Colombier * A file descriptor. 54*206fef1cSDavid du Colombier */ 55*206fef1cSDavid du Colombier struct Inode 56*206fef1cSDavid du Colombier { 57*206fef1cSDavid du Colombier Qid qid; 58*206fef1cSDavid du Colombier vlong length; 59*206fef1cSDavid du Colombier Dptr ptr; /* pointer page */ 60*206fef1cSDavid du Colombier char inuse; 61*206fef1cSDavid du Colombier }; 62*206fef1cSDavid du Colombier 63*206fef1cSDavid du Colombier /* 64*206fef1cSDavid du Colombier * inode blocks (after allocation blocks) 65*206fef1cSDavid du Colombier */ 66*206fef1cSDavid du Colombier struct Dihdr 67*206fef1cSDavid du Colombier { 68*206fef1cSDavid du Colombier ulong magic; 69*206fef1cSDavid du Colombier ulong nino; /* number of inodes */ 70*206fef1cSDavid du Colombier }; 71*206fef1cSDavid du Colombier struct Dinode 72*206fef1cSDavid du Colombier { 73*206fef1cSDavid du Colombier Dihdr; 74*206fef1cSDavid du Colombier Inode inode[1]; 75*206fef1cSDavid du Colombier }; 76