13e12c5d1SDavid du Colombier typedef struct Bbuf Bbuf; 23e12c5d1SDavid du Colombier typedef struct Bcache Bcache; 33e12c5d1SDavid du Colombier 43e12c5d1SDavid du Colombier enum 53e12c5d1SDavid du Colombier { 63e12c5d1SDavid du Colombier Nbcache= 32, /* number of blocks kept in pool */ 73e12c5d1SDavid du Colombier }; 83e12c5d1SDavid du Colombier 93e12c5d1SDavid du Colombier /* 103e12c5d1SDavid du Colombier * block cache descriptor 113e12c5d1SDavid du Colombier */ 123e12c5d1SDavid du Colombier struct Bbuf 133e12c5d1SDavid du Colombier { 143e12c5d1SDavid du Colombier Lru; /* must be first in struct */ 153e12c5d1SDavid du Colombier ulong bno; 163e12c5d1SDavid du Colombier int inuse; 173e12c5d1SDavid du Colombier Bbuf *next; /* next in dirty list */ 183e12c5d1SDavid du Colombier int dirty; 193e12c5d1SDavid du Colombier char *data; 203e12c5d1SDavid du Colombier }; 213e12c5d1SDavid du Colombier 223e12c5d1SDavid du Colombier /* 233e12c5d1SDavid du Colombier * the buffer cache 243e12c5d1SDavid du Colombier */ 253e12c5d1SDavid du Colombier struct Bcache 263e12c5d1SDavid du Colombier { 273e12c5d1SDavid du Colombier Lru; 283e12c5d1SDavid du Colombier int bsize; /* block size in bytes */ 293e12c5d1SDavid du Colombier int f; /* fd to disk */ 303e12c5d1SDavid du Colombier Bbuf *dfirst; /* dirty list */ 313e12c5d1SDavid du Colombier Bbuf *dlast; 323e12c5d1SDavid du Colombier Bbuf bb[Nbcache]; 333e12c5d1SDavid du Colombier }; 343e12c5d1SDavid du Colombier 353e12c5d1SDavid du Colombier int bcinit(Bcache*, int, int); 363e12c5d1SDavid du Colombier Bbuf* bcalloc(Bcache*, ulong); 373e12c5d1SDavid du Colombier Bbuf* bcread(Bcache*, ulong); 383e12c5d1SDavid du Colombier void bcmark(Bcache*, Bbuf*); 393e12c5d1SDavid du Colombier int bcwrite(Bcache*, Bbuf*); 403e12c5d1SDavid du Colombier int bcsync(Bcache*); 413e12c5d1SDavid du Colombier int bread(Bcache*, ulong, void*); 423e12c5d1SDavid du Colombier int bwrite(Bcache*, ulong, void*); 433e12c5d1SDavid du Colombier int bref(Bcache*, Bbuf*); 44*9a747e4fSDavid du Colombier void error(char*, ...); 453e12c5d1SDavid du Colombier void warning(char*); 46