## diffname port/cache.c 1993/1011 ## diff -e /dev/null /n/fornaxdump/1993/1011/sys/src/brazil/port/cache.c 0a #include "u.h" #include "../port/lib.h" #include "mem.h" #include "dat.h" #include "fns.h" #include "../port/error.h" #include "devtab.h" typedef struct Fcache Fcache; typedef struct Fcalloc Fcalloc; struct Fcache { QLock; Qid; Page* alloc; Fcache* hash; Fcache* next; }; struct Fcalloc { ulong start; short len; Page* data; }; Fcache* clook(Qid *qid) { } . ## diffname port/cache.c 1993/1013 ## diff -e /n/fornaxdump/1993/1011/sys/src/brazil/port/cache.c /n/fornaxdump/1993/1013/sys/src/brazil/port/cache.c 30a h = c->qid.path%NHASH; lock(&cache); for(m = cache.hash[h]; m; m = m->hash) { if(m->path == c->path) { qlock(m); if(m->path == c->qid.path) if(m->dev == c->dev) if(m->type == c->type) { unlock(&cache); return m; } qunlock(m); } } unlock(&cache); return 0; } void cnodata(Mntcache *m) { Extent *e, *n; /* * Invalidate all extent data * Image lru will waste the pages */ for(e = m->list; e; e = n) { n = e->list; free(e); } } void ctail(Mntcache *m) { lock(&cache); /* Unlink and send to the tail */ if(m->prev) m->prev->next = m->next; else cache.head = m->next; if(m->next) m->next->prev = m->prev; else cache.tail = m->prev; if(cache.tail) { m->prev = cache.tail; cache.tail->next = m; m->next = 0; cache.tail = m; } else { cache.head = cache.tail = m; m->prev = m->next = 0; } unlock(&cache); } void copen(Chan *c) { Mntcache *m, *f, **l; m = clook(c); if(m != 0) { /* File was updated */ if(m->vers != c->vers) cnodata(m); ctail(m); qunlock(m); return; } /* LRU the cache headers */ m = cache.head; qlock(m); lock(cache); l = &cache.hash[m->qid.path%NHASH]; for(f = *l; f; f = f->next) { if(f == m) { *l = f->next; break; } l = &f->next; } l = &cache.hash[c->qid.path%NHASH]; m->hash = *l; *l = m; unlock(cache); m->qid = c->qid; m->dev = c->dev; m->type = c->type; cnodata(m); ctail(m); c->mcp = m; qunlock(m); } static int cdev(Mntcache *m, Chan *c) { if(m->path != c->path) return 0; if(m->vers != c->vers) return 0; if(m->dev != c->dev) return 0; if(m->type != c->type) return 0; return 1; } int cread(Chan *c, uchar *buf, int len, long offset) { KMap *k; Page *p; Mntcache *m; Extent *e, **l; int o, l, total; m = c->mcp; if(m == 0) return 0; qlock(m); if(cdev(m, c) == 0) { qunlock(m); return 0; } end = offset+len; l = &m->list; for(e = *l; e; e = e->next) { if(e->start >= offset && e->start+e->len < end) break; l = &e->next; } if(e == 0) { qunlock(m); return 0; } total = 0; while(len) { p = lookpage(&fscache, e->bid); if(p == 0) { *l = e->next; free(e); qunlock(m); return total; } k = kmap(p); if(waserror()) { kunmap(k); putpage(p); qunlock(m); nexterror(); } o = offset - e->start; l = len; if(l > e->len-o) l = e->len-o; p = (uchar*)VA(k) + o; memset(buf, p, l); kunmap(k); putpage(p); buf += l; len -= l; offset += l; total += l; l = &e->next; e = e->next; if(e == 0 || e->start != offset) break; } qunlock(m) return total; } void cwrite(Chan *c, uchar *buf, int len, long offset) { Extent *e; Mntcache *m; if(offset > MAXCACHE) return; m = c->mcp; if(m == 0) return; qlock(m); if(cdev(m, c) == 0) { qunlock(m); return; } if(m->list == 0) { e = malloc(sizeof(Extent)); if(e == 0) return; e->start = offset; l = len; if(l > BY2PG) l = BY2PG; p = auxpage(); if(p == 0) return; e->bid = incref(&cache); p->daddr = e->bid; cachepage(p, fscache); k = kmap(p); kunmap(p); } . 29a int h; . 27,28c Mntcache* clook(Chan *c) . 25a Cache cache; . 22,24c Ref; Mntcache *head; Mntcache *tail; Mntcache *hash[NHASH]; . 20c typedef struct Cache Cache; struct Cache . 15,17c int dev; int type; Qlock; Extent *list; Mntcache *hash; Mntcache *prev; Mntcache *next; . 13c int bid; ulong start; int len; Extent *next; }; typedef struct Mntcache Mntcache; struct Mntcache { . 9,11c Image fscache; typedef Extent Extent; struct Extent . ## diffname port/cache.c 1993/1014 ## diff -e /n/fornaxdump/1993/1013/sys/src/brazil/port/cache.c /n/fornaxdump/1993/1014/sys/src/brazil/port/cache.c 273a /* append to extent list */ if(f == 0) { p->next = cchain(buf, offset, len, &tail); qunlock(m); return; } /* trim data against successor */ eblock = offset+len; if(eblock > f->start) { o = eblock - f->start; if(o < 0) { qunlock(m); return; } len -= o; } /* Insert a middle block */ p->next = cchain(buf, offset, len, &tail); if(p->next == 0) p->next = f; else tail->next = f; qunlock(m); . 267,272c } if(cpgmove(e, buf, p->len, o)) { e->len += o; buf += o; len -= o; offset += o; if(len <= 0) { qunlock(m); return; } } . 260,265c } buf += o; offset += o; } /* try and pack data into the predecessor */ if(offset == ee && p->len < BY2PG) { o = len; if(o > BY2PG - p->len) o = BY2PG - p->len; if(len <= 0) { qunlock(m); . 256,258c /* * Find the insertion point */ p = 0; for(f = m->list; f; f = f->next) { if(f->start >= offset) break; p = f; } if(p == 0) { /* at the head */ eblock = offset+len; /* trim if there is a successor */ if(f != 0 && eblock >= f->start) { len -= (eblock - f->start); if(len <= 0) { qunlock(m); return; } } e = cchain(buf, offset, len, &tail); m->list = e; if(tail != 0) tail->next = f; qunlock(m); return; } /* trim to the predecessor */ ee = p->start+p->len; if(offset < ee) { o = ee - offset; len -= o; if(len <= 0) { qunlock(m); . 242a Extent *tail; Extent *e, *f, *p; int o, ee, eblock; . 241d 239c cupdate(Chan *c, uchar *buf, int len, ulong offset) . 237a Extent* cchain(uchar *buf, ulong offset, int len, Extent **tail) { int l; Page *p; KMap *k; Extent *e, *start, **t; start = 0; t = &start; while(len) { e = malloc(sizeof(Extent)); if(e == 0) break; p = auxpage(); if(p == 0) { free(e); break; } e->cache = p; e->start = offset; l = len; if(l > BY2PG) l = BY2PG; e->bid = incref(&cache); p->daddr = e->bid; k = kmap(p); memmove((void*)VA(k), buf, l); kunmap(k); cachepage(p, &fscache); putpage(p); buf += l; offset += l; len -= l; *t = e; *tail = e; t = &e->next; } return start; } int cpgmove(Extent *e, uchar *buf, int boff, int len) { Page *p; KMap *k; p = cpage(e); if(p == 0) return 0; k = kmap(p); memmove((uchar*)VA(k)+boff, buf, len); kunmap(k); putpage(p); return 1; } . 234c qunlock(m); . 229c t = &e->next; . 220,221c memmove(buf, (uchar*)VA(k) + o, l); . 201c *t = e->next; . 199c p = cpage(e); . 189c t = &e->next; . 185,186c t = &m->list; for(e = *t; e; e = e->next) { . 172,173c Extent *e, **t; int o, l, total, end; . 167c cread(Chan *c, uchar *buf, int len, ulong offset) . 157c if(m->vers != c->qid.vers) . 155c if(m->path != c->qid.path) . 142,143c unlock(&cache); m->Qid = c->qid; . 130,131c lock(&cache); l = &cache.hash[m->path%NHASH]; . 119c if(m->vers != c->qid.vers) . 77c n = e->next; . 67a cprint(Mntcache *m) { Extent *e; print("%lux.%lux %d %d\n", m->path, m->vers, m->type, m->dev); while(e) print("\t%4d %5d %4d %lux\n", e->bid, e->start, e->len, e->cache); } Page* cpage(Extent *e) { /* Easy consistency check */ if(e->cache->daddr != e->bid) return 0; return lookpage(&fscache, e->bid); } void . 52c if(m->path == c->qid.path) { . 46a Mntcache *m; . 42a void cinit(void) { int i; Mntcache *m; cache.ref = 1; cache.head = xalloc(sizeof(Mntcache)*NFILE); m = cache.head; for(i = NFILE; i > 0; i++) { m->next = m+1; m->prev = m-1; m++; } cache.tail = m; cache.tail->next = 0; cache.head->prev = 0; } . 26c QLock; . 16a Page *cache; . 11c enum { NHASH = 128, MAXCACHE = 1024*1024, NFILE = 4096, }; typedef struct Extent Extent; . ## diffname port/cache.c 1993/1015 ## diff -e /n/fornaxdump/1993/1014/sys/src/brazil/port/cache.c /n/fornaxdump/1993/1015/sys/src/brazil/port/cache.c 458a } void cwrite(Chan* c, uchar *buf, int len, ulong offset) { int o; Mntcache *m; ulong eblock, ee; Extent *p, *f, *e, *tail; if(offset > MAXCACHE || len == 0) return; m = c->mcp; if(m == 0) return; qlock(m); if(cdev(m, c) == 0) { qunlock(m); return; } m->vers++; p = 0; for(f = m->list; f; f = f->next) { if(offset >= f->start) break; p = f; } if(p != 0) { ee = p->start+p->len; if(ee > offset) { o = ee - offset; p->len -= o; if(p->len) panic("del empty extent"); } } eblock = offset+len; /* free the overlap - its a rare case */ while(f && f->start < eblock) { e = f->next; free(f); f = e; } e = cchain(buf, offset, len, &tail); if(p == 0) m->list = e; else p->next = e; if(tail != 0) tail->next = f; qunlock(m); cprint(m, "cwrite"); . 451c /* insert a middle block */ . 421,422c if(cpgmove(p, buf, p->len, o)) { p->len += o; . 380a . 362a if(offset > MAXCACHE || len == 0) return; . 360c if(c->qid.path & CHDIR) . 358c int o, ee, eblock; . 343a . 314a e->cache = p; e->start = offset; e->len = l; . 309,310d 229a . 226a if(c->qid.path & CHDIR) return 0; . 201a cprint(m, "copen new"); . 199d 194a . 193a ctail(m, 0); . 175a cprint(m, "copen lru"); . 173,174c m->vers = c->qid.vers; } . 171c if(m->vers != c->qid.vers) { cprint(m, "copen mod"); . 169a c->mcp = m; ctail(m, 1); . 167a if(c->qid.path & CHDIR) return; . 160c if(dolock) unlock(&cache); . 137c if(dolock) lock(&cache); . 135c ctail(Mntcache *m, int dolock) . 131a m->list = 0; . 102,104c for(e = m->list; e; e = e->next) . 100a return; print("%s: 0x%lux.0x%lux %d %d\n", s, m->path, m->vers, m->type, m->dev); . 98c cprint(Mntcache *m, char *s) . 61c for(i = 0; i < NFILE; i++) { . ## diffname port/cache.c 1993/1016 ## diff -e /n/fornaxdump/1993/1015/sys/src/brazil/port/cache.c /n/fornaxdump/1993/1016/sys/src/brazil/port/cache.c 534,539c if(e != 0) { if(p == 0) m->list = e; else p->next = e; if(tail != 0) tail->next = f; } . 520c if(p->len == 0) . 485a cupdate(Chan *c, uchar *buf, int len, ulong offset) { cxupdate(c, buf, len, offset); cprint(c->mcp, "cupdate"); } void . 472d 468c len -= o; if(len <= 0) { . 441,444d 416,418c if(e != 0) { m->list = e; if(tail != 0) tail->next = f; } . 380,382d 373c cxupdate(Chan *c, uchar *buf, int len, ulong offset) . 350a . 315a *tail = 0; . 290a poperror(); . 258a if(offset < e->start) { qunlock(m); return 0; } . 257c if(offset > e->start && offset < e->start+e->len) . 215d 213a unlock(&cache); qlock(m); cnodata(m); . 212d 206,207c ctail(m); . 201c l = &f->hash; . 198c *l = f->hash; . 196c for(f = *l; f; f = f->hash) { . 193,194d 186,188d 180,184c /* File was updated, invalidate cache */ if(m->vers != c->qid.vers) { qlock(m); cnodata(m); m->vers = c->qid.vers; qunlock(m); } return; . 175,178c lock(&cache); for(m = cache.hash[c->qid.path%NHASH]; m; m = m->hash) { if(m->path == c->qid.path) if(m->dev == c->dev && m->type == c->type) { c->mcp = m; ctail(m); unlock(&cache); . 162,164d 139,141d 137c ctail(Mntcache *m) . 101c . 72,96d 61c for(i = 0; i < NFILE-1; i++) { . ## diffname port/cache.c 1993/1017 ## diff -e /n/fornaxdump/1993/1016/sys/src/brazil/port/cache.c /n/fornaxdump/1993/1017/sys/src/brazil/port/cache.c 524d 503a if(ee == offset && p->len < BY2PG) { o = len; if(o > BY2PG - p->len) o = BY2PG - p->len; if(cpgmove(p, buf, p->len, o)) { p->len += o; buf += o; len -= o; offset += o; if(len <= 0) { qunlock(m); return; } } } . 491c if(f->start >= offset) . 487a c->qid.vers++; . 463d 312c lock(&cache); e->bid = cache.pgno; cache.pgno += BY2PG; unlock(&cache); . 279a if(len) print("P"); else print("F"); . 230,233d 225d 210c int o, l, total; . 141c if((c->qid.path&CHDIR) || (c->flag&CTEXT)) . 81c pprint("\t%4d %5d %4d %lux\n", . 77,78c ptpath(c->path, buf, sizeof(buf)); pprint("%s: 0x%lux.0x%lux %d %d %s\n", s, m->path, m->vers, m->type, m->dev, buf); . 75a char buf[128]; . 73c cprint(Chan *c, Mntcache *m, char *s) . 57d 44c Lock; int pgno; . ## diffname port/cache.c 1993/1018 ## diff -e /n/fornaxdump/1993/1017/sys/src/brazil/port/cache.c /n/fornaxdump/1993/1018/sys/src/brazil/port/cache.c 504a /* Pack sequential write if there is space */ . 461,466d 353c cupdate(Chan *c, uchar *buf, int len, ulong offset) . 313a . 309a . 277c . 229c if(offset >= e->start && offset < e->start+e->len) . 214,216d 201a if(m->vers != c->qid.vers) return 0; . 196,197d 186,188c while(e) { next = e->next; free(e); e = next; } cprint(c, m, "open new"); . 183a e = m->list; m->list = 0; . 182a l = &cache.hash[h]; m->hash = *l; *l = m; ctail(m); . 175,178d 170c *l = m->hash; . 160a else cprint(c, m, "open cached"); . 159a cprint(c, m, "open mod"); . 158d 155a m->vers = c->qid.vers; . 147c for(m = cache.hash[h]; m; m = m->hash) { . 145a h = c->qid.path%NHASH; . 143c if(c->qid.path&CHDIR) . 140a int h; Extent *e, *next; . 133,134c cache.head = m; cache.tail = m; m->prev = 0; m->next = 0; . 84a } . 82,83c for(e = m->list; e; e = e->next) { if(0) pprint("\t%4d %5d %4d %lux\n", . 79,80c nb = 0; ct = 1; if(m->list) o = m->list->start; for(e = m->list; e; e = e->next) { nb += e->len; if(o != e->start) ct = 0; o = e->start+e->len; } pprint("%s: 0x%lux.0x%lux %d %d %s (%d %c)\n", s, m->path, m->vers, m->type, m->dev, buf, nb, ct ? 'C' : 'N'); . 77c return; . 74a ulong o; int nb, ct; . ## diffname port/cache.c 1993/1022 ## diff -e /n/fornaxdump/1993/1018/sys/src/brazil/port/cache.c /n/fornaxdump/1993/1022/sys/src/brazil/port/cache.c 557a . ## diffname port/cache.c 1993/1028 ## diff -e /n/fornaxdump/1993/1022/sys/src/brazil/port/cache.c /n/fornaxdump/1993/1028/sys/src/brazil/port/cache.c 216d 180,181d 178d 79c . ## diffname port/cache.c 1993/1103 ## diff -e /n/fornaxdump/1993/1028/sys/src/brazil/port/cache.c /n/fornaxdump/1993/1103/sys/src/brazil/port/cache.c 95c pprint("\t%4d %5d %4d %lux\n", . 82a o = 0; . ## diffname port/cache.c 1994/0728 ## diff -e /n/fornaxdump/1993/1103/sys/src/brazil/port/cache.c /n/fornaxdump/1994/0728/sys/src/brazil/port/cache.c 369a poperror(); . 368a if(waserror()) { /* Since buf may be virtual */ kunmap(k); nexterror(); } . 340a poperror(); . 339a if(waserror()) { /* buf may be virtual */ kunmap(k); nexterror(); } . 287a . 279,283d 270a o = offset - e->start; l = len; if(l > e->len-o) l = e->len-o; . ## diffname port/cache.c 1994/0817 ## diff -e /n/fornaxdump/1994/0728/sys/src/brazil/port/cache.c /n/fornaxdump/1994/0817/sys/src/brazil/port/cache.c 69a fscache.notext = 1; . ## diffname port/cache.c 1996/0223 ## diff -e /n/fornaxdump/1994/0817/sys/src/brazil/port/cache.c /n/fornaxdump/1996/0223/sys/src/brazil/port/cache.c 7d ## diffname port/cache.c 1996/0326 ## diff -e /n/fornaxdump/1996/0223/sys/src/brazil/port/cache.c /n/fornaxdump/1996/0326/sys/src/brazil/port/cache.c 526a } if(f != 0) { o = offset - f->start; if(o >= 0) { n = f->len - o; if(n > len) n = len; if(n > 0) { if(cpgmove(f, buf, o, n)) { buf += n; len -= n; offset += n; } if(len == 0) { qunlock(m); return; } } } . 501c int o, n; . ## diffname port/cache.c 1996/0329 ## diff -e /n/fornaxdump/1996/0326/sys/src/brazil/port/cache.c /n/fornaxdump/1996/0329/sys/src/brazil/port/cache.c 531,545c n = f->len - o; if(n > len) n = len; if(cpgmove(f, buf, o, n)) { len -= n; if(len == 0) { qunlock(m); return; } offset += n; buf += n; . 529c if(f != 0 && offset < f->start+f->len) { . ## diffname port/cache.c 1996/0402 ## diff -e /n/fornaxdump/1996/0329/sys/src/brazil/port/cache.c /n/fornaxdump/1996/0402/sys/src/brazil/port/cache.c 529c if(0 && f != 0 && offset < f->start+f->len) { . ## diffname port/cache.c 1997/0327 ## diff -e /n/fornaxdump/1996/0402/sys/src/brazil/port/cache.c /n/emeliedump/1997/0327/sys/src/brazil/port/cache.c 214a qunlock(m); . 204a qlock(m); . ## diffname port/cache.c 1998/0327 ## diff -e /n/emeliedump/1997/0327/sys/src/brazil/port/cache.c /n/emeliedump/1998/0327/sys/src/brazil/port/cache.c 520a offset = off; . 508c if(off > MAXCACHE || len == 0) . 506a ulong offset; . 501c cwrite(Chan* c, uchar *buf, int len, vlong off) . 414a offset = off; . 400c if(off > MAXCACHE || len == 0) . 398a ulong offset; . 393c cupdate(Chan *c, uchar *buf, int len, vlong off) . 251a offset = off; . 241a if(off+len > MAXCACHE) return 0; . 240a ulong offset; . 234c cread(Chan *c, uchar *buf, int len, vlong off) . ## diffname port/cache.c 1998/0512 ## diff -e /n/emeliedump/1998/0327/sys/src/brazil/port/cache.c /n/emeliedump/1998/0512/sys/src/brazil/port/cache.c 537c p = f; . 132c if(m->prev) . 59c . ## diffname port/cache.c 1999/0508 ## diff -e /n/emeliedump/1998/0512/sys/src/brazil/port/cache.c /n/emeliedump/1999/0508/sys/src/brazil/port/cache.c 586c extentfree(f); . 331c extentfree(e); . 325c e = extentalloc(); . 274c extentfree(e); . 213c extentfree(e); . 123c extentfree(e); . 50a typedef struct Ecache Ecache; struct Ecache { Lock; int total; int free; Extent* head; }; static Image fscache; static Cache cache; static Ecache ecache; static void extentfree(Extent* e) { lock(&ecache); e->next = ecache.head; ecache.head = e; ecache.free++; unlock(&ecache); } static Extent* extentalloc(void) { Extent *e; int i; lock(&ecache); if(ecache.head == nil){ e = xalloc(NEXTENT*sizeof(Extent)); if(e == nil){ unlock(&ecache); return nil; } for(i = 0; i < NEXTENT; i++){ e->next = ecache.head; ecache.head = e; e++; } ecache.free += NEXTENT; ecache.total += NEXTENT; } e = ecache.head; ecache.head = e->next; memset(e, 0, sizeof(Extent)); ecache.free--; unlock(&ecache); return e; } . 49d 14a NEXTENT = 200, /* extent allocation size */ . 8,9d ## diffname port/cache.c 1999/0629 ## diff -e /n/emeliedump/1999/0508/sys/src/brazil/port/cache.c /n/emeliedump/1999/0629/sys/src/brazil/port/cache.c 146c s, m->path, m->vers, m->type, m->dev, c->name, nb, ct ? 'C' : 'N'); . 133d 131d ## diffname port/cache.c 1999/0903 ## diff -e /n/emeliedump/1999/0629/sys/src/brazil/port/cache.c /n/emeliedump/1999/0903/sys/src/brazil/port/cache.c 566c if(off > maxcache || len == 0) . 456c if(off > maxcache || len == 0) . 293c if(off+len > maxcache) . 111a if(conf.npage*BY2PG > 200*MB) maxcache = 10*MAXCACHE; . 60a static int maxcache = MAXCACHE; . ## diffname port/cache.c 1999/1022 ## diff -e /n/emeliedump/1999/0903/sys/src/brazil/port/cache.c /n/emeliedump/1999/1022/sys/src/brazil/port/cache.c 398a /* wrap the counter; low bits are unused by pghash by checked by lookpage */ if((cache.pgno & ~(BY2PG-1)) == 0){ if(cache.pgno == BY2PG-1){ print("cache wrapped\n"); cache.pgno = 0; }else cache.pgno++; } . ## diffname port/cache.c 1999/1101 ## diff -e /n/emeliedump/1999/1022/sys/src/brazil/port/cache.c /n/emeliedump/1999/1101/sys/src/9/port/cache.c 399c /* wrap the counter; low bits are unused by pghash but checked by lookpage */ . ## diffname port/cache.c 1999/1227 ## diff -e /n/emeliedump/1999/1101/sys/src/9/port/cache.c /n/emeliedump/1999/1227/sys/src/9/port/cache.c 661a if(p == 0) m->list = f; else p->next = f; . 654,660c tail->next = f; f = e; . 651a /* link the block (if any) into the middle */ . 645d 643a /* free the overlap -- it's a rare case */ . 636,639d 629,632c if(o > BY2PG - eo) o = BY2PG - eo; if(cpgmove(p, buf, eo, o)) { if(eo+o > p->len) p->len = eo+o; . 620,627c eo = offset - p->start; /* pack in predecessor if there is space */ if(offset <= ee && eo < BY2PG) { . 602,617d 572c int o, eo; . 565c } . 541,563c e = cchain(buf, offset, len, &tail); if(e != 0) { p->next = e; . 534a if (f && p->start + p->len > f->start) print("CACHE: p->start=%uld p->len=%d f->start=%uld\n", p->start, p->len, f->start); . 504,505c tail->next = f; . 500a } if(p == 0) { /* at the head */ . 491,499c /* trim if there is a successor */ eblock = offset+len; if(f != 0 && eblock > f->start) { len -= (eblock - f->start); if(len <= 0) { qunlock(m); return; . 486c if(f->start > offset) . ## diffname port/cache.c 2000/0609 ## diff -e /n/emeliedump/1999/1227/sys/src/9/port/cache.c /n/emeliedump/2000/0609/sys/src/9/port/cache.c 114a if(conf.npage*BY2PG > 400*MB) maxcache = 50*MAXCACHE; . 112a /* a better algorithm would be nice */ . ## diffname port/cache.c 2001/0203 ## diff -e /n/emeliedump/2000/0609/sys/src/9/port/cache.c /n/emeliedump/2001/0203/sys/src/9/port/cache.c 114,117c // if(conf.npage*BY2PG > 200*MB) // maxcache = 10*MAXCACHE; // if(conf.npage*BY2PG > 400*MB) // maxcache = 50*MAXCACHE; . ## diffname port/cache.c 2001/0527 ## diff -e /n/emeliedump/2001/0203/sys/src/9/port/cache.c /n/emeliedump/2001/0527/sys/src/9/port/cache.c 576c m->qid.vers++; . 285c if(m->qid.vers != c->qid.vers) . 280a if(m->qid.type != c->qid.type) return 0; . 279c if(m->qid.path != c->qid.path) . 253c m->qid = c->qid; . 244c l = &cache.hash[m->qid.path%NHASH]; . 232,233c if(m->qid.vers != c->qid.vers) { m->qid.vers = c->qid.vers; . 225c if(m->qid.path == c->qid.path) if(m->qid.type == c->qid.type) . 219c /* directories aren't cacheable and append-only files confuse us */ if(c->qid.type&(QTDIR|QTAPPEND)) . 151c s, m->qid.path, m->qid.vers, m->type, m->dev, c->name, nb, ct ? 'C' : 'N'); . 114,117c if(conf.npage*BY2PG > 200*MB) maxcache = 10*MAXCACHE; if(conf.npage*BY2PG > 400*MB) maxcache = 50*MAXCACHE; . 29c Qid qid; . ## diffname port/cache.c 2001/0530 ## diff -e /n/emeliedump/2001/0527/sys/src/9/port/cache.c /n/emeliedump/2001/0530/sys/src/9/port/cache.c 114,117c // if(conf.npage*BY2PG > 200*MB) // maxcache = 10*MAXCACHE; // if(conf.npage*BY2PG > 400*MB) // maxcache = 50*MAXCACHE; . ## diffname port/cache.c 2003/0406 ## diff -e /n/emeliedump/2001/0530/sys/src/9/port/cache.c /n/emeliedump/2003/0406/sys/src/9/port/cache.c 542c if(f && p->start + p->len > f->start) print("CACHE: p->start=%uld p->len=%d f->start=%uld\n", p->start, p->len, f->start); .