M gnot/dat.h => gnot/dat.h +1 -0
@@ 176,6 176,7 @@ struct Dev
long (*write)(Chan*, void*, long, ulong);
void (*remove)(Chan*);
void (*wstat)(Chan*, char*);
+ Chan *(*clwalk)(Chan*, char*);
};
struct Dirtab
M gnot/devcons.c => gnot/devcons.c +6 -0
@@ 491,6 491,12 @@ conswalk(Chan *c, char *name)
return devwalk(c, name, consdir, NCONS, consgen);
}
+Chan*
+consclwalk(Chan *c, char *name)
+{
+ return devclwalk(c, name);
+}
+
void
consstat(Chan *c, char *dp)
{
M gnot/devincon.c => gnot/devincon.c +6 -0
@@ 359,6 359,12 @@ inconwalk(Chan *c, char *name)
return devwalk(c, name, 0, 0, streamgen);
}
+Chan*
+inconclwalk(Chan *c, char *name)
+{
+ return devclwalk(c, name);
+}
+
void
inconstat(Chan *c, char *dp)
{
M gnot/devport.c => gnot/devport.c +6 -0
@@ 83,6 83,12 @@ portwalk(Chan *c, char *name)
return devwalk(c, name, portdir, NPORT, devgen);
}
+Chan*
+portclwalk(Chan *c, char *name)
+{
+ return devclwalk(c, name);
+}
+
void
portstat(Chan *c, char *db)
{
M gnot/fns.h => gnot/fns.h +1 -0
@@ 28,6 28,7 @@ void delete(List**, List*, List*);
void delete0(List**, List*);
Chan *devattach(int, char*);
Chan *devclone(Chan*, Chan*);
+Chan *devclwalk(Chan*, char*);
void devdir(Chan*, Qid, char*, long, long, Dir*);
long devdirread(Chan*, char*, long, Dirtab*, int, Devgen*);
Devgen devgen;
M port/devbit.c => port/devbit.c +6 -0
@@ 191,6 191,12 @@ bitwalk(Chan *c, char *name)
return devwalk(c, name, bitdir, NBIT, devgen);
}
+Chan*
+bitclwalk(Chan *c, char *name)
+{
+ return devclwalk(c, name);
+}
+
void
bitstat(Chan *c, char *db)
{
M port/devboot.c => port/devboot.c +6 -0
@@ 47,6 47,12 @@ bootwalk(Chan *c, char *name)
return devwalk(c, name, bootdir, NBOOT, devgen);
}
+Chan*
+bootclwalk(Chan *c, char *name)
+{
+ return devclwalk(c, name);
+}
+
void
bootstat(Chan *c, char *dp)
{
M port/devcons.c => port/devcons.c +6 -0
@@ 404,6 404,12 @@ conswalk(Chan *c, char *name)
return devwalk(c, name, consdir, NCONS, devgen);
}
+Chan*
+consclwalk(Chan *c, char *name)
+{
+ return devclwalk(c, name);
+}
+
void
consstat(Chan *c, char *dp)
{
M port/devdk.c => port/devdk.c +6 -0
@@ 753,6 753,12 @@ dkwalk(Chan *c, char *name)
return devwalk(c, name, dksubdir, Nsubdir, streamgen);
}
+Chan*
+dkclwalk(Chan *c, char *name)
+{
+ return devclwalk(c, name);
+}
+
void
dkstat(Chan *c, char *dp)
{
M port/devdup.c => port/devdup.c +6 -0
@@ 46,6 46,12 @@ dupclone(Chan *c, Chan *nc)
return devclone(c, nc);
}
+Chan*
+dupclwalk(Chan *c, char *name)
+{
+ return devclwalk(c, name);
+}
+
int
dupwalk(Chan *c, char *name)
{
M port/devenv.c => port/devenv.c +6 -0
@@ 270,6 270,12 @@ envwalk(Chan *c, char *name)
return 0;
}
+Chan*
+envclwalk(Chan *c, char *name)
+{
+ return devclwalk(c, name);
+}
+
void
envstat(Chan *c, char *db)
{
M port/deviproute.c => port/deviproute.c +7 -1
@@ 190,7 190,7 @@ enum{
Qdata,
};
Dirtab iproutetab[]={
- "iproute", Qdata, 0, 0600,
+ "iproute", {Qdata}, 0, 0600,
};
#define Niproutetab (sizeof(iproutetab)/sizeof(Dirtab))
@@ 222,6 222,12 @@ iproutewalk(Chan *c, char *name)
return devwalk(c, name, iproutetab, (long)Niproutetab, devgen);
}
+Chan*
+iprouteclwalk(Chan *c, char *name)
+{
+ return devclwalk(c, name);
+}
+
void
iproutestat(Chan *c, char *db)
{
M port/devkprof.c => port/devkprof.c +6 -0
@@ 63,6 63,12 @@ kprofwalk(Chan *c, char *name)
return devwalk(c, name, kproftab, (long)Nkproftab, devgen);
}
+Chan*
+kprofclwalk(Chan *c, char *name)
+{
+ return devclwalk(c, name);
+}
+
void
kprofstat(Chan *c, char *db)
{
M port/devlance.c => port/devlance.c +6 -0
@@ 579,6 579,12 @@ lancewalk(Chan *c, char *name)
return devwalk(c, name, 0, 0, streamgen);
}
+Chan*
+lanceclwalk(Chan *c, char *name)
+{
+ return devclwalk(c, name);
+}
+
void
lancestat(Chan *c, char *dp)
{
M port/devnonet.c => port/devnonet.c +6 -0
@@ 202,6 202,12 @@ nonetwalk(Chan *c, char *name)
return devwalk(c, name, nosubdir, Nsubdir, streamgen);
}
+Chan*
+nonetclwalk(Chan *c, char *name)
+{
+ return devclwalk(c, name);
+}
+
void
nonetstat(Chan *c, char *dp)
{
M port/devpipe.c => port/devpipe.c +6 -0
@@ 125,6 125,12 @@ pipewalk(Chan *c, char *name)
return devwalk(c, name, pipedir, NPIPEDIR, pipegen);
}
+Chan*
+pipeclwalk(Chan *c, char *name)
+{
+ return devclwalk(c, name);
+}
+
void
pipestat(Chan *c, char *db)
{
M port/devproc.c => port/devproc.c +6 -0
@@ 101,6 101,12 @@ procwalk(Chan *c, char *name)
return devwalk(c, name, 0, 0, procgen);
}
+Chan*
+procclwalk(Chan *c, char *name)
+{
+ return devclwalk(c, name);
+}
+
void
procstat(Chan *c, char *db)
{
M port/devroot.c => port/devroot.c +6 -0
@@ 61,6 61,12 @@ rootwalk(Chan *c, char *name)
return devwalk(c, name, rootdir, nroot, devgen);
}
+Chan*
+rootclwalk(Chan *c, char *name)
+{
+ return devclwalk(c, name);
+}
+
void
rootstat(Chan *c, char *dp)
{
M port/devscsi.c => port/devscsi.c +6 -0
@@ 94,6 94,12 @@ scsiwalk(Chan *c, char *name)
return devwalk(c, name, 0, 0, scsigen);
}
+Chan*
+scsiclwalk(Chan *c, char *name)
+{
+ return devclwalk(c, name);
+}
+
void
scsistat(Chan *c, char *db)
{
M port/devsrv.c => port/devsrv.c +6 -0
@@ 105,6 105,12 @@ srvwalk(Chan *c, char *name)
return 1;
}
+Chan*
+srvclwalk(Chan *c, char *name)
+{
+ return devclwalk(c, name);
+}
+
void
srvstat(Chan *c, char *db)
{
M port/devwren.c => port/devwren.c +6 -0
@@ 175,6 175,12 @@ wrenwalk(Chan *c, char *name)
return devwalk(c, name, wrendir, NWREN, wrengen);
}
+Chan*
+wrenclwalk(Chan *c, char *name)
+{
+ return devclwalk(c, name);
+}
+
void
wrenstat(Chan *c, char *db)
{
M port/stream.c => port/stream.c +3 -0
@@ 223,6 223,7 @@ allocb(ulong size)
/*
* return an empty block
*/
+ bp->flags = bcp - bclass;
bp->rptr = bp->wptr = bp->base;
bp->next = 0;
bp->type = M_DATA;
@@ 248,6 249,7 @@ freeb(Block *bp)
panic("freeb class");
for(; bp; bp = nbp){
bcp = &bclass[bp->flags & S_CLASS];
+ bp->flags = S_CLASS; /* Check for doulbe free */
lock(bcp);
bp->rptr = bp->wptr = 0;
if(bcp->first)
@@ 596,6 598,7 @@ pullup(Block *bp, int n)
/*
* if not enough room in the first block,
* add another to the front of the list.
+ */
if(bp->lim - bp->rptr < n){
nbp = allocb(n);
nbp->next = bp;
M port/sysfile.c => port/sysfile.c +0 -6
@@ 227,10 227,8 @@ sysread(ulong *arg)
c = fdtochan(arg[0], OREAD);
validaddr(arg[1], arg[2], 1);
qlock(&c->rdl);
- qlock(&c->wrl); /* BUG BUG BUG */
if(waserror()){
qunlock(&c->rdl);
- qunlock(&c->wrl); /* BUG BUG BUG */
nexterror();
}
n = arg[2];
@@ 245,7 243,6 @@ sysread(ulong *arg)
n = (*devtab[c->type].read)(c, (void*)arg[1], n, c->offset);
c->offset += n;
qunlock(&c->rdl);
- qunlock(&c->wrl); /* BUG BUG BUG */
return n;
}
@@ 257,10 254,8 @@ syswrite(ulong *arg)
c = fdtochan(arg[0], OWRITE);
validaddr(arg[1], arg[2], 0);
- qlock(&c->rdl); /* BUG BUG BUG */
qlock(&c->wrl);
if(waserror()){
- qunlock(&c->rdl); /* BUG BUG BUG */
qunlock(&c->wrl);
nexterror();
}
@@ 268,7 263,6 @@ syswrite(ulong *arg)
error(Eisdir);
n = (*devtab[c->type].write)(c, (void*)arg[1], arg[2], c->offset);
c->offset += n;
- qunlock(&c->rdl); /* BUG BUG BUG */
qunlock(&c->wrl);
return n;
}
M power/dat.h => power/dat.h +1 -0
@@ 186,6 186,7 @@ struct Dev
long (*write)(Chan*, void*, long, ulong);
void (*remove)(Chan*);
void (*wstat)(Chan*, char*);
+ Chan *(*clwalk)(Chan*, char*);
};
struct Dirtab
M power/devhotrod.c => power/devhotrod.c +6 -0
@@ 152,6 152,12 @@ hotrodwalk(Chan *c, char *name)
return devwalk(c, name, hotroddir, NHOTRODDIR, devgen);
}
+Chan*
+hotrodclwalk(Chan *c, char *name)
+{
+ return devclwalk(c, name);
+}
+
void
hotrodstat(Chan *c, char *dp)
{
M power/devhs.c => power/devhs.c +6 -0
@@ 184,6 184,12 @@ hsvmewalk(Chan *c, char *name)
return devwalk(c, name, 0, 0, streamgen);
}
+Chan*
+hsvmeclwalk(Chan *c, char *name)
+{
+ return devclwalk(c, name);
+}
+
void
hsvmestat(Chan *c, char *dp)
{
M power/devrtc.c => power/devrtc.c +6 -0
@@ 104,6 104,12 @@ rtcwalk(Chan *c, char *name)
return 0;
}
+Chan*
+rtcclwalk(Chan *c, char *name)
+{
+ return devclwalk(c, name);
+}
+
void
rtcstat(Chan *c, char *dp)
{
M power/fns.h => power/fns.h +1 -0
@@ 36,6 36,7 @@ void delete(List**, List*, List*);
void delete0(List**, List*);
Chan *devattach(int, char*);
Chan *devclone(Chan*, Chan*);
+Chan *devclwalk(Chan*, char*);
void devdir(Chan*, Qid, char*, long, long, Dir*);
long devdirread(Chan*, char*, long, Dirtab*, int, Devgen*);
Devgen devgen;
M ss/dat.h => ss/dat.h +1 -0
@@ 178,6 178,7 @@ struct Dev
long (*write)(Chan*, void*, long, ulong );
void (*remove)(Chan*);
void (*wstat)(Chan*, char*);
+ Chan *(*clwalk)(Chan*, char*);
};
struct Dirtab
M ss/fns.h => ss/fns.h +1 -0
@@ 30,6 30,7 @@ void delete(List**, List*, List*);
void delete0(List**, List*);
Chan *devattach(int, char*);
Chan *devclone(Chan*, Chan*);
+Chan *devclwalk(Chan*, char*);
void devdir(Chan*, Qid, char*, long, long, Dir*);
long devdirread(Chan*, char*, long, Dirtab*, int, Devgen*);
Devgen devgen;