diff options
author | cinap_lenrek <cinap_lenrek@centraldogma> | 2011-12-22 02:17:29 +0100 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@centraldogma> | 2011-12-22 02:17:29 +0100 |
commit | ea5a23d39a5a5313144055481e85689809d65673 (patch) | |
tree | b660637d50779df301b782c9f19a381c63efba12 /sys/src/9/port/fault.c | |
parent | 27830ae53e8dfaea0c809410f27c66214c6d2560 (diff) |
kernel: make mntcache effective, be carefull
Diffstat (limited to 'sys/src/9/port/fault.c')
-rw-r--r-- | sys/src/9/port/fault.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/sys/src/9/port/fault.c b/sys/src/9/port/fault.c index 5854d796c..4a1cbdbff 100644 --- a/sys/src/9/port/fault.c +++ b/sys/src/9/port/fault.c @@ -200,7 +200,7 @@ pio(Segment *s, ulong addr, ulong soff, Page **p) Page *new; KMap *k; Chan *c; - int n, ask; + int n, ask, cache; char *kaddr; ulong daddr; Page *loadrec; @@ -238,15 +238,18 @@ retry: k = kmap(new); kaddr = (char*)VA(k); + cache = c->flag & CCACHE; while(waserror()) { + c->flag |= cache; if(strcmp(up->errstr, Eintr) == 0) continue; kunmap(k); putpage(new); faulterror(Eioload, c, 0); } - + c->flag &= ~CCACHE; n = devtab[c->type]->read(c, kaddr, ask, daddr); + c->flag |= cache; if(n != ask) faulterror(Eioload, c, 0); if(ask < BY2PG) |