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*);
|