13e12c5d1SDavid du Colombier /* 23e12c5d1SDavid du Colombier * format of cache on disk 33e12c5d1SDavid du Colombier */ 43e12c5d1SDavid du Colombier typedef struct Dptr Dptr; 53e12c5d1SDavid du Colombier typedef struct Dahdr Dahdr; 63e12c5d1SDavid du Colombier typedef struct Dalloc Dalloc; 73e12c5d1SDavid du Colombier typedef struct Fphdr Fphdr; 83e12c5d1SDavid du Colombier typedef struct Fptr Fptr; 93e12c5d1SDavid du Colombier typedef struct Inode Inode; 103e12c5d1SDavid du Colombier typedef struct Dihdr Dihdr; 113e12c5d1SDavid du Colombier typedef struct Dinode Dinode; 123e12c5d1SDavid du Colombier 133e12c5d1SDavid du Colombier enum 143e12c5d1SDavid du Colombier { 1541fb754aSDavid du Colombier Amagic= 0xbebeefed, /* allocation block magic */ 1641fb754aSDavid du Colombier Imagic= 0xbadc00ce, /* inode block magic */ 173e12c5d1SDavid du Colombier BtoUL= 8*sizeof(ulong),/* bits in a ulong */ 18*7c70c028SDavid du Colombier CACHENAMELEN= 128 193e12c5d1SDavid du Colombier }; 203e12c5d1SDavid du Colombier #define Indbno 0x80000000 /* indirect block */ 213e12c5d1SDavid du Colombier #define Notabno 0xFFFFFFFF /* not a block number */ 223e12c5d1SDavid du Colombier 233e12c5d1SDavid du Colombier /* 243e12c5d1SDavid du Colombier * Allocation blocks at the begining of the disk. There are 253e12c5d1SDavid du Colombier * enough of these blocks to supply 1 bit for each block on the 263e12c5d1SDavid du Colombier * disk; 273e12c5d1SDavid du Colombier */ 283e12c5d1SDavid du Colombier struct Dahdr 293e12c5d1SDavid du Colombier { 303e12c5d1SDavid du Colombier ulong magic; 313e12c5d1SDavid du Colombier ulong bsize; /* logical block size */ 32*7c70c028SDavid du Colombier char name[CACHENAMELEN]; 333e12c5d1SDavid du Colombier short nab; /* number of allocation blocks */ 343e12c5d1SDavid du Colombier }; 353e12c5d1SDavid du Colombier struct Dalloc 363e12c5d1SDavid du Colombier { 373e12c5d1SDavid du Colombier Dahdr; 383e12c5d1SDavid du Colombier ulong bits[1]; 393e12c5d1SDavid du Colombier }; 403e12c5d1SDavid du Colombier 413e12c5d1SDavid du Colombier /* 423e12c5d1SDavid du Colombier * A pointer to disk data 433e12c5d1SDavid du Colombier */ 443e12c5d1SDavid du Colombier struct Dptr 453e12c5d1SDavid du Colombier { 463e12c5d1SDavid du Colombier ulong fbno; /* file block number */ 473e12c5d1SDavid du Colombier ulong bno; /* disk block number */ 483e12c5d1SDavid du Colombier ushort start; /* offset into block of valid data */ 493e12c5d1SDavid du Colombier ushort end; /* offset into block after valid data */ 503e12c5d1SDavid du Colombier }; 513e12c5d1SDavid du Colombier 523e12c5d1SDavid du Colombier /* 533e12c5d1SDavid du Colombier * A file descriptor. 543e12c5d1SDavid du Colombier */ 553e12c5d1SDavid du Colombier struct Inode 563e12c5d1SDavid du Colombier { 573e12c5d1SDavid du Colombier Qid qid; 589a747e4fSDavid du Colombier vlong length; 593e12c5d1SDavid du Colombier Dptr ptr; /* pointer page */ 603e12c5d1SDavid du Colombier char inuse; 613e12c5d1SDavid du Colombier }; 623e12c5d1SDavid du Colombier 633e12c5d1SDavid du Colombier /* 643e12c5d1SDavid du Colombier * inode blocks (after allocation blocks) 653e12c5d1SDavid du Colombier */ 663e12c5d1SDavid du Colombier struct Dihdr 673e12c5d1SDavid du Colombier { 683e12c5d1SDavid du Colombier ulong magic; 693e12c5d1SDavid du Colombier ulong nino; /* number of inodes */ 703e12c5d1SDavid du Colombier }; 713e12c5d1SDavid du Colombier struct Dinode 723e12c5d1SDavid du Colombier { 733e12c5d1SDavid du Colombier Dihdr; 743e12c5d1SDavid du Colombier Inode inode[1]; 753e12c5d1SDavid du Colombier }; 76