typedef struct Ibuf Ibuf; typedef struct Imap Imap; typedef struct Icache Icache; enum { Nicache= 64, /* number of inodes kept in pool */ }; /* * a cached inode buffer */ struct Ibuf { Lru; /* must be first in structure */ int inuse; /* non-0 if in use */ ulong ino; /* index into inode table */ Inode inode; /* the inode contents */ }; /* * in-core qid to inode mapping */ struct Imap { Lru; /* must be first in structure */ Qid qid; Ibuf *b; /* cache buffer */ int inuse; /* non-0 if in use */ }; /* * the inode cache */ struct Icache { Disk; int nino; /* number of inodes */ ulong ib0; /* first inode block */ int nib; /* number of inode blocks */ int i2b; /* inodes to a block */ Ibuf ib[Nicache]; /* inode buffers */ Lru blru; Imap *map; /* inode to qid mapping */ Lru mlru; }; Ibuf* ialloc(Icache*, ulong); Ibuf* iget(Icache*, Qid); Ibuf* iread(Icache*, ulong); int iformat(Icache*, int, ulong, char*, int, int); int iinit(Icache*, int, int, char*); int iremove(Icache*, ulong); int iupdate(Icache*, ulong, Qid); int iwrite(Icache*, Ibuf*); void ifree(Icache*, Ibuf*); void iinc(Icache*, Ibuf*);