Subversion Repositories planix.SVN

Rev

Rev 2 | Blame | Compare with Previous | Last modification | View Log | RSS feed

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