xref: /plan9/sys/src/cmd/cfs/cformat.h (revision 7c70c028d2d46a27a61ae88e6df0eb0935d9da7a)
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