From 577d31ab137f300e8b6fcb25bbb206777fb8d557 Mon Sep 17 00:00:00 2001 From: cinap_lenrek Date: Thu, 12 Jan 2012 12:54:45 +0100 Subject: [PATCH] fix race condition of the CCACHE flag by clearing the flag in attachimage() instead of temporarily reseting in pio(). --- sys/src/9/port/fault.c | 6 +----- sys/src/9/port/segment.c | 1 + 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/sys/src/9/port/fault.c b/sys/src/9/port/fault.c index 4a1cbdbff..5ab0c9f2e 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, cache; + int n, ask; char *kaddr; ulong daddr; Page *loadrec; @@ -238,18 +238,14 @@ 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) diff --git a/sys/src/9/port/segment.c b/sys/src/9/port/segment.c index db896c9e3..aa0ab33cc 100644 --- a/sys/src/9/port/segment.c +++ b/sys/src/9/port/segment.c @@ -287,6 +287,7 @@ attachimage(int type, Chan *c, ulong base, ulong len) lock(i); incref(c); + c->flag &= ~CCACHE; i->c = c; i->type = c->type; i->qid = c->qid;