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