1*206fef1cSDavid du Colombier typedef struct Bbuf Bbuf; 2*206fef1cSDavid du Colombier typedef struct Bcache Bcache; 3*206fef1cSDavid du Colombier 4*206fef1cSDavid du Colombier enum 5*206fef1cSDavid du Colombier { 6*206fef1cSDavid du Colombier Nbcache= 32, /* number of blocks kept in pool */ 7*206fef1cSDavid du Colombier }; 8*206fef1cSDavid du Colombier 9*206fef1cSDavid du Colombier /* 10*206fef1cSDavid du Colombier * block cache descriptor 11*206fef1cSDavid du Colombier */ 12*206fef1cSDavid du Colombier struct Bbuf 13*206fef1cSDavid du Colombier { 14*206fef1cSDavid du Colombier Lru; /* must be first in struct */ 15*206fef1cSDavid du Colombier ulong bno; 16*206fef1cSDavid du Colombier int inuse; 17*206fef1cSDavid du Colombier Bbuf *next; /* next in dirty list */ 18*206fef1cSDavid du Colombier int dirty; 19*206fef1cSDavid du Colombier char *data; 20*206fef1cSDavid du Colombier }; 21*206fef1cSDavid du Colombier 22*206fef1cSDavid du Colombier /* 23*206fef1cSDavid du Colombier * the buffer cache 24*206fef1cSDavid du Colombier */ 25*206fef1cSDavid du Colombier struct Bcache 26*206fef1cSDavid du Colombier { 27*206fef1cSDavid du Colombier Lru; 28*206fef1cSDavid du Colombier int bsize; /* block size in bytes */ 29*206fef1cSDavid du Colombier char *memcache; /* memory cache base */ 30*206fef1cSDavid du Colombier Bbuf *dfirst; /* dirty list */ 31*206fef1cSDavid du Colombier Bbuf *dlast; 32*206fef1cSDavid du Colombier Bbuf bb[Nbcache]; 33*206fef1cSDavid du Colombier }; 34*206fef1cSDavid du Colombier 35*206fef1cSDavid du Colombier int bcinit(Bcache*, char*, int); 36*206fef1cSDavid du Colombier Bbuf* bcalloc(Bcache*, ulong); 37*206fef1cSDavid du Colombier Bbuf* bcread(Bcache*, ulong); 38*206fef1cSDavid du Colombier void bcmark(Bcache*, Bbuf*); 39*206fef1cSDavid du Colombier int bcwrite(Bcache*, Bbuf*); 40*206fef1cSDavid du Colombier int bcsync(Bcache*); 41*206fef1cSDavid du Colombier int bread(Bcache*, ulong, void*); 42*206fef1cSDavid du Colombier int bwrite(Bcache*, ulong, void*); 43*206fef1cSDavid du Colombier int bref(Bcache*, Bbuf*); 44*206fef1cSDavid du Colombier void error(char*, ...); 45*206fef1cSDavid du Colombier void warning(char*); 46