typedef struct Bbuf     Bbuf;
typedef struct Bcache   Bcache;

enum
{
       Nbcache=        32,             /* number of blocks kept in pool */
};

/*
*  block cache descriptor
*/
struct Bbuf
{
       Lru;                            /* must be first in struct */
       ulong   bno;
       int     inuse;
       Bbuf    *next;                  /* next in dirty list */
       int     dirty;
       char    *data;
};

/*
*  the buffer cache
*/
struct Bcache
{
       Lru;
       int     bsize;                  /* block size in bytes */
       int     f;                      /* fd to disk */
       Bbuf    *dfirst;                /* dirty list */
       Bbuf    *dlast;
       Bbuf    bb[Nbcache];
};

int     bcinit(Bcache*, int, int);
Bbuf*   bcalloc(Bcache*, ulong);
Bbuf*   bcread(Bcache*, ulong);
void    bcmark(Bcache*, Bbuf*);
int     bcwrite(Bcache*, Bbuf*);
int     bcsync(Bcache*);
int     bread(Bcache*, ulong, void*);
int     bwrite(Bcache*, ulong, void*);
int     bref(Bcache*, Bbuf*);
void    error(char*, ...);
void    warning(char*);