13e12c5d1SDavid du Colombier typedef struct Ibuf Ibuf; 23e12c5d1SDavid du Colombier typedef struct Imap Imap; 33e12c5d1SDavid du Colombier typedef struct Icache Icache; 43e12c5d1SDavid du Colombier 53e12c5d1SDavid du Colombier enum 63e12c5d1SDavid du Colombier { 73e12c5d1SDavid du Colombier Nicache= 64, /* number of inodes kept in pool */ 83e12c5d1SDavid du Colombier }; 93e12c5d1SDavid du Colombier 103e12c5d1SDavid du Colombier /* 113e12c5d1SDavid du Colombier * a cached inode buffer 123e12c5d1SDavid du Colombier */ 133e12c5d1SDavid du Colombier struct Ibuf 143e12c5d1SDavid du Colombier { 153e12c5d1SDavid du Colombier Lru; /* must be first in structure */ 163e12c5d1SDavid du Colombier int inuse; /* non-0 if in use */ 173e12c5d1SDavid du Colombier ulong ino; /* index into inode table */ 183e12c5d1SDavid du Colombier Inode inode; /* the inode contents */ 193e12c5d1SDavid du Colombier }; 203e12c5d1SDavid du Colombier 213e12c5d1SDavid du Colombier /* 223e12c5d1SDavid du Colombier * in-core qid to inode mapping 233e12c5d1SDavid du Colombier */ 243e12c5d1SDavid du Colombier struct Imap 253e12c5d1SDavid du Colombier { 263e12c5d1SDavid du Colombier Lru; /* must be first in structure */ 273e12c5d1SDavid du Colombier Qid qid; 283e12c5d1SDavid du Colombier Ibuf *b; /* cache buffer */ 293e12c5d1SDavid du Colombier int inuse; /* non-0 if in use */ 303e12c5d1SDavid du Colombier }; 313e12c5d1SDavid du Colombier 323e12c5d1SDavid du Colombier /* 333e12c5d1SDavid du Colombier * the inode cache 343e12c5d1SDavid du Colombier */ 353e12c5d1SDavid du Colombier struct Icache 363e12c5d1SDavid du Colombier { 373e12c5d1SDavid du Colombier Disk; 383e12c5d1SDavid du Colombier 393e12c5d1SDavid du Colombier int nino; /* number of inodes */ 403e12c5d1SDavid du Colombier ulong ib0; /* first inode block */ 413e12c5d1SDavid du Colombier int nib; /* number of inode blocks */ 423e12c5d1SDavid du Colombier int i2b; /* inodes to a block */ 433e12c5d1SDavid du Colombier 443e12c5d1SDavid du Colombier Ibuf ib[Nicache]; /* inode buffers */ 453e12c5d1SDavid du Colombier Lru blru; 463e12c5d1SDavid du Colombier 473e12c5d1SDavid du Colombier Imap *map; /* inode to qid mapping */ 483e12c5d1SDavid du Colombier Lru mlru; 493e12c5d1SDavid du Colombier }; 503e12c5d1SDavid du Colombier 513e12c5d1SDavid du Colombier Ibuf* ialloc(Icache*, ulong); 523e12c5d1SDavid du Colombier Ibuf* iget(Icache*, Qid); 533e12c5d1SDavid du Colombier Ibuf* iread(Icache*, ulong); 543e12c5d1SDavid du Colombier int iformat(Icache*, int, ulong, char*, int, int); 55*7c70c028SDavid du Colombier int iinit(Icache*, int, int, char*); 563e12c5d1SDavid du Colombier int iremove(Icache*, ulong); 573e12c5d1SDavid du Colombier int iupdate(Icache*, ulong, Qid); 583e12c5d1SDavid du Colombier int iwrite(Icache*, Ibuf*); 593e12c5d1SDavid du Colombier void ifree(Icache*, Ibuf*); 603e12c5d1SDavid du Colombier void iinc(Icache*, Ibuf*); 61