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