xref: /plan9-contrib/sys/src/cmd/ramcfs/inode.h (revision 206fef1c8a79725587ecb1892b58204f8235c098)
1*206fef1cSDavid du Colombier typedef struct Ibuf	Ibuf;
2*206fef1cSDavid du Colombier typedef struct Imap	Imap;
3*206fef1cSDavid du Colombier typedef struct Icache	Icache;
4*206fef1cSDavid du Colombier 
5*206fef1cSDavid du Colombier enum
6*206fef1cSDavid du Colombier {
7*206fef1cSDavid du Colombier 	Nicache=	64,		/* number of inodes kept in pool */
8*206fef1cSDavid du Colombier };
9*206fef1cSDavid du Colombier 
10*206fef1cSDavid du Colombier /*
11*206fef1cSDavid du Colombier  *  a cached inode buffer
12*206fef1cSDavid du Colombier  */
13*206fef1cSDavid du Colombier struct Ibuf
14*206fef1cSDavid du Colombier {
15*206fef1cSDavid du Colombier 	Lru;			/* must be first in structure */
16*206fef1cSDavid du Colombier 	int	inuse;		/* non-0 if in use */
17*206fef1cSDavid du Colombier 	ulong	ino;		/* index into inode table */
18*206fef1cSDavid du Colombier 	Inode	inode;		/* the inode contents */
19*206fef1cSDavid du Colombier };
20*206fef1cSDavid du Colombier 
21*206fef1cSDavid du Colombier /*
22*206fef1cSDavid du Colombier  *  in-core qid to inode mapping
23*206fef1cSDavid du Colombier  */
24*206fef1cSDavid du Colombier struct Imap
25*206fef1cSDavid du Colombier {
26*206fef1cSDavid du Colombier 	Lru;			/* must be first in structure */
27*206fef1cSDavid du Colombier 	Qid	qid;
28*206fef1cSDavid du Colombier 	Ibuf	*b;		/* cache buffer */
29*206fef1cSDavid du Colombier 	int	inuse;		/* non-0 if in use */
30*206fef1cSDavid du Colombier };
31*206fef1cSDavid du Colombier 
32*206fef1cSDavid du Colombier /*
33*206fef1cSDavid du Colombier  *  the inode cache
34*206fef1cSDavid du Colombier  */
35*206fef1cSDavid du Colombier struct Icache
36*206fef1cSDavid du Colombier {
37*206fef1cSDavid du Colombier 	Disk;
38*206fef1cSDavid du Colombier 
39*206fef1cSDavid du Colombier 	int	nino;		/* number of inodes */
40*206fef1cSDavid du Colombier 	ulong	ib0;		/* first inode block */
41*206fef1cSDavid du Colombier 	int	nib;		/* number of inode blocks */
42*206fef1cSDavid du Colombier 	int	i2b;		/* inodes to a block */
43*206fef1cSDavid du Colombier 
44*206fef1cSDavid du Colombier 	Ibuf	ib[Nicache];	/* inode buffers */
45*206fef1cSDavid du Colombier 	Lru	blru;
46*206fef1cSDavid du Colombier 
47*206fef1cSDavid du Colombier 	Imap	*map;		/* inode to qid mapping */
48*206fef1cSDavid du Colombier 	Lru	mlru;
49*206fef1cSDavid du Colombier };
50*206fef1cSDavid du Colombier 
51*206fef1cSDavid du Colombier Ibuf*	ialloc(Icache*, ulong);
52*206fef1cSDavid du Colombier Ibuf*	iget(Icache*, Qid);
53*206fef1cSDavid du Colombier Ibuf*	iread(Icache*, ulong);
54*206fef1cSDavid du Colombier int	iformat(Icache*, char*, ulong, char*, int, int);
55*206fef1cSDavid du Colombier int	iinit(Icache*, char*, int, char*);
56*206fef1cSDavid du Colombier int	iremove(Icache*, ulong);
57*206fef1cSDavid du Colombier int	iupdate(Icache*, ulong, Qid);
58*206fef1cSDavid du Colombier int	iwrite(Icache*, Ibuf*);
59*206fef1cSDavid du Colombier void	ifree(Icache*, Ibuf*);
60*206fef1cSDavid du Colombier void	iinc(Icache*, Ibuf*);
61