diff options
author | cinap_lenrek <cinap_lenrek@gmx.de> | 2013-06-16 06:26:31 +0200 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@gmx.de> | 2013-06-16 06:26:31 +0200 |
commit | e36d9f5c4e667970a4a7aa15744e304ccc7c58f3 (patch) | |
tree | 353251f1adcf5cd89a1cc901f7aed099011b8a19 /sys/src | |
parent | d84aeddee7911c9df739bad58c72189ac336f23f (diff) |
make filesystem handling of read9pmsg() consistent
Diffstat (limited to 'sys/src')
-rw-r--r-- | sys/src/cmd/9nfs/9p.c | 2 | ||||
-rw-r--r-- | sys/src/cmd/acme/fsys.c | 3 | ||||
-rw-r--r-- | sys/src/cmd/aux/consolefs.c | 5 | ||||
-rw-r--r-- | sys/src/cmd/aux/depend.c | 5 | ||||
-rw-r--r-- | sys/src/cmd/cfs/cfs.c | 5 | ||||
-rw-r--r-- | sys/src/cmd/cpu.c | 4 | ||||
-rw-r--r-- | sys/src/cmd/exportfs/exportfs.c | 5 | ||||
-rw-r--r-- | sys/src/cmd/iostats/iostats.c | 3 | ||||
-rw-r--r-- | sys/src/cmd/ip/ftpfs/ftpfs.c | 4 | ||||
-rw-r--r-- | sys/src/cmd/ndb/cs.c | 4 | ||||
-rw-r--r-- | sys/src/cmd/ndb/dns.c | 5 | ||||
-rw-r--r-- | sys/src/cmd/paqfs/paqfs.c | 2 | ||||
-rw-r--r-- | sys/src/cmd/plumb/fsys.c | 8 | ||||
-rw-r--r-- | sys/src/cmd/rio/fsys.c | 5 | ||||
-rw-r--r-- | sys/src/cmd/vac/vacfs.c | 4 | ||||
-rw-r--r-- | sys/src/cmd/vnc/exportfs.c | 5 | ||||
-rw-r--r-- | sys/src/lib9p/srv.c | 4 |
17 files changed, 46 insertions, 27 deletions
diff --git a/sys/src/cmd/9nfs/9p.c b/sys/src/cmd/9nfs/9p.c index 27fc2b5a8..55575c384 100644 --- a/sys/src/cmd/9nfs/9p.c +++ b/sys/src/cmd/9nfs/9p.c @@ -44,6 +44,8 @@ again: clog("xmesg read error: %r\n"); return -1; } + if(n == 0) + goto again; if(convM2S(s->data, n, &s->f) <= 0){ clog("xmesg bad convM2S %d %.2x %.2x %.2x %.2x\n", n, ((uchar*)s->data)[0], ((uchar*)s->data)[1], diff --git a/sys/src/cmd/acme/fsys.c b/sys/src/cmd/acme/fsys.c index 7235bbe22..edc65537d 100644 --- a/sys/src/cmd/acme/fsys.c +++ b/sys/src/cmd/acme/fsys.c @@ -148,7 +148,8 @@ fsysproc(void *) x = nil; for(;;){ buf = emalloc(messagesize+UTFmax); /* overflow for appending partial rune in xfidwrite */ - n = read9pmsg(sfd, buf, messagesize); + while((n = read9pmsg(sfd, buf, messagesize)) == 0 && !closing) + ; if(n <= 0){ if(closing) break; diff --git a/sys/src/cmd/aux/consolefs.c b/sys/src/cmd/aux/consolefs.c index 180431bd4..ebc5e1230 100644 --- a/sys/src/cmd/aux/consolefs.c +++ b/sys/src/cmd/aux/consolefs.c @@ -681,8 +681,9 @@ fsrun(void *v) } free(d); r = allocreq(fs, messagesize); - n = read9pmsg(fs->fd, r->buf, messagesize); - if(n <= 0) + while((n = read9pmsg(fs->fd, r->buf, messagesize)) == 0) + ; + if(n < 0) fatal("unmounted"); if(convM2S(r->buf, n, &r->f) == 0){ diff --git a/sys/src/cmd/aux/depend.c b/sys/src/cmd/aux/depend.c index a7e031d38..6132b2d22 100644 --- a/sys/src/cmd/aux/depend.c +++ b/sys/src/cmd/aux/depend.c @@ -365,9 +365,10 @@ fsrun(void *a) for(;;){ r = allocreq(messagesize); qlock(&iolock); - n = read9pmsg(fs->fd, r->buf, messagesize); + while((n = read9pmsg(fs->fd, r->buf, messagesize)) == 0) + ; qunlock(&iolock); - if(n <= 0) + if(n < 0) fatal("read9pmsg error: %r"); if(convM2S(r->buf, n, &r->f) == 0){ diff --git a/sys/src/cmd/cfs/cfs.c b/sys/src/cmd/cfs/cfs.c index 2fbf3f421..d49e32a98 100644 --- a/sys/src/cmd/cfs/cfs.c +++ b/sys/src/cmd/cfs/cfs.c @@ -808,8 +808,9 @@ rcvmsg(P9fs *p, Fcall *f) char buf[128]; olen = p->len; - p->len = read9pmsg(p->fd[0], datarcv, sizeof(datarcv)); - if(p->len <= 0){ + while((p->len = read9pmsg(p->fd[0], datarcv, sizeof(datarcv))) == 0) + ; + if(p->len < 0){ snprint(buf, sizeof buf, "read9pmsg(%d)->%ld: %r", p->fd[0], p->len); error(buf); diff --git a/sys/src/cmd/cpu.c b/sys/src/cmd/cpu.c index 16d73e814..16c0f6186 100644 --- a/sys/src/cmd/cpu.c +++ b/sys/src/cmd/cpu.c @@ -1090,11 +1090,13 @@ notefs(int fd) ncpunote = 0; for(;;){ n = read9pmsg(fd, buf, sizeof(buf)); - if(n <= 0){ + if(n < 0){ if(dbg) fprint(2, "read9pmsg(%d) returns %d: %r\n", fd, n); break; } + if(n == 0) + continue; if(convM2S(buf, n, &f) <= BIT16SZ) break; if(dbg) diff --git a/sys/src/cmd/exportfs/exportfs.c b/sys/src/cmd/exportfs/exportfs.c index ae9ad20d4..b618369b4 100644 --- a/sys/src/cmd/exportfs/exportfs.c +++ b/sys/src/cmd/exportfs/exportfs.c @@ -388,8 +388,9 @@ main(int argc, char **argv) if(r == 0) fatal("Out of service buffers"); - n = localread9pmsg(netfd, r->buf, messagesize, ini); - if(n <= 0) + while((n = localread9pmsg(netfd, r->buf, messagesize, ini)) == 0) + ; + if(n < 0) fatal(nil); if(convM2S(r->buf, n, &r->work) == 0) fatal("convM2S format error"); diff --git a/sys/src/cmd/iostats/iostats.c b/sys/src/cmd/iostats/iostats.c index 8b1356d0a..61b16ea4b 100644 --- a/sys/src/cmd/iostats/iostats.c +++ b/sys/src/cmd/iostats/iostats.c @@ -164,7 +164,8 @@ main(int argc, char **argv) if(r == 0) fatal("Out of service buffers"); - n = read9pmsg(p[1], r->buf, sizeof(r->buf)); + while((n = read9pmsg(p[1], r->buf, sizeof(r->buf))) == 0 && !done) + ; if(done) break; if(n < 0) diff --git a/sys/src/cmd/ip/ftpfs/ftpfs.c b/sys/src/cmd/ip/ftpfs/ftpfs.c index 5d6f35b2e..540ce853b 100644 --- a/sys/src/cmd/ip/ftpfs/ftpfs.c +++ b/sys/src/cmd/ip/ftpfs/ftpfs.c @@ -262,12 +262,14 @@ io(void) while(!dying){ n = read9pmsg(mfd, mdata, messagesize); - if(n <= 0){ + if(n < 0){ errstr(buf, sizeof buf); if(buf[0]=='\0' || strstr(buf, "hungup")) exits(""); fatal("mount read: %s\n", buf); } + if(n == 0) + continue; if(convM2S(mdata, n, &thdr) == 0) continue; diff --git a/sys/src/cmd/ndb/cs.c b/sys/src/cmd/ndb/cs.c index f760c8f39..512f1706a 100644 --- a/sys/src/cmd/ndb/cs.c +++ b/sys/src/cmd/ndb/cs.c @@ -444,8 +444,10 @@ io(void) for(;;){ n = read9pmsg(mfd[0], mdata, sizeof mdata); - if(n<=0) + if(n < 0) error("mount read"); + if(n == 0) + continue; job = newjob(); if(convM2S(mdata, n, &job->request) != n){ syslog(1, logfile, "format error %ux %ux %ux %ux %ux", diff --git a/sys/src/cmd/ndb/dns.c b/sys/src/cmd/ndb/dns.c index 32bae4040..5a8e25ce6 100644 --- a/sys/src/cmd/ndb/dns.c +++ b/sys/src/cmd/ndb/dns.c @@ -430,8 +430,9 @@ io(void) while(!stop){ procsetname("%d %s/dns Twrites of %d 9p rpcs read; %d alarms", stats.qrecvd9p, mntpt, stats.qrecvd9prpc, stats.alarms); - n = read9pmsg(mfd[0], mdata, sizeof mdata); - if(n<=0){ + while((n = read9pmsg(mfd[0], mdata, sizeof mdata)) == 0) + ; + if(n < 0){ dnslog("error reading 9P from %s: %r", mntpt); sleep(2000); /* don't thrash after read error */ return; diff --git a/sys/src/cmd/paqfs/paqfs.c b/sys/src/cmd/paqfs/paqfs.c index 6769326f9..8fe05cc05 100644 --- a/sys/src/cmd/paqfs/paqfs.c +++ b/sys/src/cmd/paqfs/paqfs.c @@ -817,7 +817,7 @@ io(int fd) if(n < 0) sysfatal("mount read"); if(n == 0) - break; + continue; if(convM2S(mdata, n, &rhdr) == 0) continue; diff --git a/sys/src/cmd/plumb/fsys.c b/sys/src/cmd/plumb/fsys.c index ffedce259..0a5f6fbdd 100644 --- a/sys/src/cmd/plumb/fsys.c +++ b/sys/src/cmd/plumb/fsys.c @@ -237,12 +237,10 @@ fsysproc(void*) if(buf == nil) error("malloc failed: %r"); qlock(&readlock); - n = read9pmsg(srvfd, buf, messagesize); - if(n <= 0){ - if(n < 0) - error("i/o error on server channel"); + while((n = read9pmsg(srvfd, buf, messagesize)) == 0) + ; + if(n < 0) threadexitsall("unmounted"); - } if(readlock.head == nil) /* no other processes waiting to read; start one */ proccreate(fsysproc, nil, Stack); qunlock(&readlock); diff --git a/sys/src/cmd/rio/fsys.c b/sys/src/cmd/rio/fsys.c index 1676ef1f9..fe4d186e4 100644 --- a/sys/src/cmd/rio/fsys.c +++ b/sys/src/cmd/rio/fsys.c @@ -194,8 +194,9 @@ filsysproc(void *arg) x = nil; for(;;){ buf = emalloc(messagesize+UTFmax); /* UTFmax for appending partial rune in xfidwrite */ - n = read9pmsg(fs->sfd, buf, messagesize); - if(n <= 0){ + while((n = read9pmsg(fs->sfd, buf, messagesize)) == 0) + yield(); + if(n < 0){ yield(); /* if threadexitsall'ing, will not return */ fprint(2, "rio: %d: read9pmsg: %d %r\n", getpid(), n); errorshouldabort = 0; diff --git a/sys/src/cmd/vac/vacfs.c b/sys/src/cmd/vac/vacfs.c index 164bf8060..cc1a5ca06 100644 --- a/sys/src/cmd/vac/vacfs.c +++ b/sys/src/cmd/vac/vacfs.c @@ -706,8 +706,10 @@ io(void) for(;;){ n = read9pmsg(mfd[0], mdata, sizeof mdata); - if(n <= 0) + if(n < 0) break; + if(n == 0) + continue; if(convM2Su(mdata, n, &rhdr, dotu) != n) sysfatal("convM2S conversion error"); diff --git a/sys/src/cmd/vnc/exportfs.c b/sys/src/cmd/vnc/exportfs.c index a2feb83ae..07e20e477 100644 --- a/sys/src/cmd/vnc/exportfs.c +++ b/sys/src/cmd/vnc/exportfs.c @@ -149,8 +149,9 @@ exportproc(Export *fs) errdepth(ed); q = smalloc(sizeof(Exq)); - n = read9pmsg(fs->io, q->buf, Maxrpc); - if(n <= 0 || convM2S(q->buf, n, &q->rpc) != n) + while((n = read9pmsg(fs->io, q->buf, Maxrpc)) == 0) + ; + if(n < 0 || convM2S(q->buf, n, &q->rpc) != n) goto bad; if(exdebug) diff --git a/sys/src/lib9p/srv.c b/sys/src/lib9p/srv.c index 12b1d7fe5..5a2bd9e1c 100644 --- a/sys/src/lib9p/srv.c +++ b/sys/src/lib9p/srv.c @@ -59,7 +59,9 @@ getreq(Srv *s) Req *r; qlock(&s->rlock); - if((n = read9pmsg(s->infd, s->rbuf, s->msize)) <= 0){ + while((n = read9pmsg(s->infd, s->rbuf, s->msize)) == 0) + ; + if(n < 0){ qunlock(&s->rlock); return nil; } |