exportfs, oexportfs, iostats: make -d log to stderr

exportfs -d logs 9p traffic to /tmp/exportdb.
-f allows writing to a different file.
exportfs silently continues if it doesn't have
permissions to create or write to /tmp/exportdb.
These are poor behaviors.

A better default is to write to stderr, since it
is 9P debug info that is better immediately printed,
and not user info that is better handled by syslog().
As a result, -f is obsolete and thus removed.
Redirect responsibility is now on rc.
As a side effect, rc will fail if it doesn't
have permissions to write.

exportfs(4) is updated to reflect all changes
and with a better Synopsis.

oexportfs is changed to match exportfs.
oexportfs(4) is updated to reflect all changes.
The Synopsis is not changed due to the number of flags.

Removed -f from iostats.
iostats(4) is updated to reflect all changes.
---
This commit is contained in:
amavect 2021-08-18 17:51:40 +00:00
parent 8c228a123f
commit 0f58e47551
10 changed files with 70 additions and 98 deletions

View file

@ -4,7 +4,23 @@ exportfs, srvfs \- file server plumbing
.SH SYNOPSIS
.B exportfs
[
.I options
.B -dsR
]
[
.B -m
.I msize
]
[
.B -r
.I root
]
[
.B -P
.I patternfile
]
[
.B -S
.I srvfile
]
.PP
.B srvfs
@ -39,11 +55,8 @@ into a local file tree.
.PP
The options are:
.TP
.B -d -f \fIdbgfile
Log all 9P traffic to
.I dbgfile
(default
.BR /tmp/exportdb ).
.B -d
Log all 9P traffic to standard error.
.TP
.B -P \fIpatternfile
Restrict the set of exported files.

View file

@ -7,9 +7,6 @@ iostats \- file system to measure I/O
.B -d
] [
.B -C
] [
.B -f
.I dbfile
]
.I cmd
[
@ -17,7 +14,7 @@ iostats \- file system to measure I/O
]
.SH DESCRIPTION
.I Iostats
is a user-level 9p filter that interposes itself between a program
is a user-level 9P filter that interposes itself between a program
and the regular file server, which
allows it to gather statistics of file system
use at the level of the Plan 9 file system protocol, 9P.
@ -51,11 +48,8 @@ by the program in terms of opens, reads and writes.
.PP
If the
.B -d
flag is present, a debugging log including all traffic
is written to
.I dbfile
(default
.BR iostats.out ).
flag is present, a debugging log including all 9P traffic
is written to standard error.
.PP
The
.B -C
@ -73,7 +67,7 @@ iostats ls
Start a new shell, displaying all 9P traffic caused by the shell or its children:
.IP
.EX
iostats -df /fd/1 rc
iostats -d rc
.EE
.SH SOURCE
.B /sys/src/cmd/iostats.c

View file

@ -26,11 +26,8 @@ services.
.PP
The options are:
.TP
.B -d -f \fIdbgfile
Log all 9P traffic to
.I dbgfile
(default
.BR /tmp/exportdb ).
.B -d
Log all 9P traffic to standard error.
.TP
.B -P \fIpatternfile
Restrict the set of exported files.

View file

@ -10,18 +10,16 @@ int readonly;
void
usage(void)
{
fprint(2, "usage: %s [-dsR] [-f dbgfile] [-m msize] [-r root] "
"[-S srvfile] [-P exclusion-file]\n", argv0);
fprint(2, "usage: %s [-dsR] [-m msize] [-r root] "
"[-P patternfile] [-S srvfile]\n", argv0);
fatal("usage");
}
void
main(int argc, char **argv)
{
char *dbfile, *srv, *srvfdfile;
int n;
char *srv, *srvfdfile;
dbfile = "/tmp/exportdb";
srv = nil;
srvfd = -1;
srvfdfile = nil;
@ -31,10 +29,6 @@ main(int argc, char **argv)
dbg++;
break;
case 'f':
dbfile = EARGF(usage());
break;
case 'm':
messagesize = strtoul(EARGF(usage()), nil, 0);
break;
@ -82,13 +76,7 @@ main(int argc, char **argv)
exclusions();
if(dbg) {
n = create(dbfile, OWRITE|OTRUNC, 0666);
dup(n, DFD);
close(n);
}
DEBUG(DFD, "exportfs: started\n");
DEBUG(2, "exportfs: started\n");
rfork(RFNOTEG|RFREND);
@ -106,13 +94,13 @@ main(int argc, char **argv)
char ebuf[ERRMAX];
ebuf[0] = '\0';
errstr(ebuf, sizeof ebuf);
DEBUG(DFD, "chdir(\"%s\"): %s\n", srv, ebuf);
DEBUG(2, "chdir(\"%s\"): %s\n", srv, ebuf);
mounterror(ebuf);
}
DEBUG(DFD, "invoked as server for %s", srv);
DEBUG(2, "invoked as server for %s", srv);
}
DEBUG(DFD, "\niniting root\n");
DEBUG(2, "\niniting root\n");
initroot();
io();
}

View file

@ -3,7 +3,6 @@
*/
#define DEBUG if(!dbg){}else fprint
#define DFD 9
#define fidhash(s) fhash[s%FHASHSIZE]
typedef struct Fsrpc Fsrpc;

View file

@ -65,7 +65,7 @@ Xflush(Fsrpc *t)
w = m->busy;
if(w != nil && w->work.tag == t->work.oldtag) {
w->flushtag = t->work.tag;
DEBUG(DFD, "\tset flushtag %d\n", t->work.tag);
DEBUG(2, "\tset flushtag %d\n", t->work.tag);
postnote(PNPROC, m->pid, "flush");
unlock(m);
putsbuf(t);
@ -75,7 +75,7 @@ Xflush(Fsrpc *t)
}
reply(&t->work, &rhdr, 0);
DEBUG(DFD, "\tflush reply\n");
DEBUG(2, "\tflush reply\n");
putsbuf(t);
}
@ -359,7 +359,7 @@ Xremove(Fsrpc *t)
}
path = makepath(f->f, "");
DEBUG(DFD, "\tremove: %s\n", path);
DEBUG(2, "\tremove: %s\n", path);
if(remove(path) < 0) {
free(path);
errstr(err, sizeof err);
@ -518,7 +518,7 @@ blockingslave(Proc *m)
if(p == nil) /* Swept */
break;
DEBUG(DFD, "\tslave: %d %F\n", m->pid, &p->work);
DEBUG(2, "\tslave: %d %F\n", m->pid, &p->work);
if(p->flushtag != NOTAG)
goto flushme;
@ -629,7 +629,7 @@ slaveopen(Fsrpc *p)
}
path = makepath(f->f, "");
DEBUG(DFD, "\topen: %s %d\n", path, work->mode);
DEBUG(2, "\topen: %s %d\n", path, work->mode);
f->fid = open(path, work->mode);
free(path);
if(f->fid < 0 || (d = dirfstat(f->fid)) == nil) {
@ -646,7 +646,7 @@ slaveopen(Fsrpc *p)
goto Error;
}
DEBUG(DFD, "\topen: fd %d\n", f->fid);
DEBUG(2, "\topen: fd %d\n", f->fid);
f->mode = work->mode;
f->offset = 0;
rhdr.iounit = getiounit(f->fid);
@ -688,7 +688,7 @@ slaveread(Fsrpc *p)
reply(work, &rhdr, err);
return;
}
DEBUG(DFD, "\tread: fd=%d %d bytes\n", f->fid, r);
DEBUG(2, "\tread: fd=%d %d bytes\n", f->fid, r);
rhdr.data = data;
rhdr.count = r;
@ -720,7 +720,7 @@ slavewrite(Fsrpc *p)
return;
}
DEBUG(DFD, "\twrite: %d bytes fd=%d\n", n, f->fid);
DEBUG(2, "\twrite: %d bytes fd=%d\n", n, f->fid);
rhdr.count = n;
reply(work, &rhdr, 0);

View file

@ -49,7 +49,7 @@ io(void)
if(convM2S(r->buf, n, &r->work) != n)
fatal("convM2S format error");
DEBUG(DFD, "%F\n", &r->work);
DEBUG(2, "%F\n", &r->work);
(fcalls[r->work.type])(r);
}
}
@ -69,7 +69,7 @@ reply(Fcall *r, Fcall *t, char *err)
else
t->type = r->type + 1;
DEBUG(DFD, "\t%F\n", t);
DEBUG(2, "\t%F\n", t);
data = malloc(messagesize); /* not mallocz; no need to clear */
if(data == nil)
@ -224,7 +224,7 @@ freefile(File *f)
while(--f->ref == 0){
freecnt++;
DEBUG(DFD, "free %s\n", f->name);
DEBUG(2, "free %s\n", f->name);
/* delete from parent */
parent = f->parent;
if(parent->child == f)
@ -250,7 +250,7 @@ file(File *parent, char *name)
char *path;
File *f;
DEBUG(DFD, "\tfile: 0x%p %s name %s\n", parent, parent->name, name);
DEBUG(2, "\tfile: 0x%p %s name %s\n", parent, parent->name, name);
path = makepath(parent, name);
if(patternfile != nil && excludefile(path)){
@ -429,17 +429,17 @@ uniqueqid(Dir *d)
}
path = d->qid.path;
while(qidexists(path)){
DEBUG(DFD, "collision on %s\n", d->name);
DEBUG(2, "collision on %s\n", d->name);
/* collision: find a new one */
ncollision++;
path &= QIDPATH;
++newqid;
if(newqid >= (1<<16)){
DEBUG(DFD, "collision wraparound\n");
DEBUG(2, "collision wraparound\n");
newqid = 1;
}
path |= newqid<<48;
DEBUG(DFD, "assign qid %.16llux\n", path);
DEBUG(2, "assign qid %.16llux\n", path);
}
qidcnt++;
q = emallocz(sizeof(Qidtab));
@ -472,7 +472,7 @@ fatal(char *s, ...)
postnote(PNPROC, m->pid, "kill");
if(s != nil) {
DEBUG(DFD, "%s\n", buf);
DEBUG(2, "%s\n", buf);
sysfatal("%s", buf); /* caution: buf could contain '%' */
} else
exits(nil);

View file

@ -59,7 +59,7 @@ filter(int fd, char *cmd, char *host)
strecpy(strrchr(addr, '!'), addr+sizeof(addr), s);
}
DEBUG(DFD, "filter: %s\n", addr);
DEBUG(2, "filter: %s\n", addr);
snprint(buf, sizeof(buf), "%s", cmd);
argc = tokenize(buf, argv, nelem(argv)-3);
@ -108,7 +108,7 @@ mksecret(char *t, uchar *f)
void
usage(void)
{
fprint(2, "usage: %s [-adnsR] [-f dbgfile] [-m msize] [-r root] "
fprint(2, "usage: %s [-adnsR] [-m msize] [-r root] "
"[-S srvfile] [-e 'crypt hash'] [-P exclusion-file] "
"[-A announce-string] [-B address]\n", argv0);
fatal("usage");
@ -118,12 +118,11 @@ void
main(int argc, char **argv)
{
char buf[ERRMAX], ebuf[ERRMAX], initial[4], *ini, *srvfdfile;
char *dbfile, *srv, *na, *nsfile, *keyspec;
char *srv, *na, *nsfile, *keyspec;
int doauth, n, fd;
AuthInfo *ai;
Fsrpc *r;
dbfile = "/tmp/exportdb";
srv = nil;
srvfd = -1;
srvfdfile = nil;
@ -148,10 +147,6 @@ main(int argc, char **argv)
ealgs = nil;
break;
case 'f':
dbfile = EARGF(usage());
break;
case 'k':
keyspec = EARGF(usage());
break;
@ -254,18 +249,12 @@ main(int argc, char **argv)
exclusions();
if(dbg) {
n = create(dbfile, OWRITE|OTRUNC, 0666);
dup(n, DFD);
close(n);
}
if(srvfd >= 0 && srv != nil){
fprint(2, "%s: -S cannot be used with -r or -s\n", argv0);
usage();
}
DEBUG(DFD, "%s: started\n", argv0);
DEBUG(2, "%s: started\n", argv0);
rfork(RFNOTEG|RFREND);
@ -289,10 +278,10 @@ main(int argc, char **argv)
if(chdir(srv) < 0) {
ebuf[0] = '\0';
errstr(ebuf, sizeof ebuf);
DEBUG(DFD, "chdir(\"%s\"): %s\n", srv, ebuf);
DEBUG(2, "chdir(\"%s\"): %s\n", srv, ebuf);
mounterror(ebuf);
}
DEBUG(DFD, "invoked as server for %s", srv);
DEBUG(2, "invoked as server for %s", srv);
strncpy(buf, srv, sizeof buf);
}
else {
@ -301,22 +290,22 @@ main(int argc, char **argv)
if(n < 0) {
errstr(buf, sizeof buf);
fprint(0, "read(0): %s\n", buf);
DEBUG(DFD, "read(0): %s\n", buf);
DEBUG(2, "read(0): %s\n", buf);
exits(buf);
}
buf[n] = 0;
if(chdir(buf) < 0) {
errstr(ebuf, sizeof ebuf);
fprint(0, "chdir(%d:\"%s\"): %s\n", n, buf, ebuf);
DEBUG(DFD, "chdir(%d:\"%s\"): %s\n", n, buf, ebuf);
DEBUG(2, "chdir(%d:\"%s\"): %s\n", n, buf, ebuf);
exits(ebuf);
}
}
DEBUG(DFD, "\niniting root\n");
DEBUG(2, "\niniting root\n");
initroot();
DEBUG(DFD, "%s: %s\n", argv0, buf);
DEBUG(2, "%s: %s\n", argv0, buf);
if(srv == nil && srvfd == -1 && write(0, "OK", 2) != 2)
fatal("open ack write");
@ -436,7 +425,7 @@ main(int argc, char **argv)
if(convM2S(r->buf, n, &r->work) != n)
fatal("convM2S format error");
DEBUG(DFD, "%F\n", &r->work);
DEBUG(2, "%F\n", &r->work);
(fcalls[r->work.type])(r);
}
io();

View file

@ -42,7 +42,7 @@ exclusions(void)
if(include == nil)
fatal("out of memory");
}
DEBUG(DFD, "\tinclude %s\n", line+2);
DEBUG(2, "\tinclude %s\n", line+2);
include[ni] = regcomp(line+2);
include[++ni] = nil;
break;
@ -53,12 +53,12 @@ exclusions(void)
if(exclude == nil)
fatal("out of memory");
}
DEBUG(DFD, "\texclude %s\n", line+2);
DEBUG(2, "\texclude %s\n", line+2);
exclude[ne] = regcomp(line+2);
exclude[++ne] = nil;
break;
default:
DEBUG(DFD, "ignoring pattern %s\n", line);
DEBUG(2, "ignoring pattern %s\n", line);
break;
}
}
@ -76,16 +76,16 @@ excludefile(char *path)
else
p = path+1;
DEBUG(DFD, "checking %s\n", p);
DEBUG(2, "checking %s\n", p);
for(re = include; *re != nil; re++){
if(regexec(*re, p, nil, 0) != 1){
DEBUG(DFD, "excluded+ %s\n", p);
DEBUG(2, "excluded+ %s\n", p);
return -1;
}
}
for(re = exclude; *re != nil; re++){
if(regexec(*re, p, nil, 0) == 1){
DEBUG(DFD, "excluded- %s\n", p);
DEBUG(2, "excluded- %s\n", p);
return -1;
}
}
@ -98,7 +98,7 @@ preaddir(Fid *f, uchar *data, int n, vlong offset)
int r = 0, m;
Dir *d;
DEBUG(DFD, "\tpreaddir n=%d wo=%lld fo=%lld\n", n, offset, f->offset);
DEBUG(2, "\tpreaddir n=%d wo=%lld fo=%lld\n", n, offset, f->offset);
if(offset == 0 && f->offset != 0){
if(seek(f->fid, 0, 0) != 0)
return -1;
@ -128,9 +128,9 @@ preaddir(Fid *f, uchar *data, int n, vlong offset)
free(p);
}
m = convD2M(d, data, n);
DEBUG(DFD, "\t\tconvD2M %d\n", m);
DEBUG(2, "\t\tconvD2M %d\n", m);
if(m <= BIT16SZ){
DEBUG(DFD, "\t\t\tneeded %d\n", GBIT16(data));
DEBUG(2, "\t\t\tneeded %d\n", GBIT16(data));
/* not enough room for full entry; leave for next time */
f->cdir--;
return r;

View file

@ -6,7 +6,6 @@
#include <auth.h>
#include <fcall.h>
#define DEBUGFILE "iostats.out"
#define DONESTR "done"
enum{
@ -250,7 +249,7 @@ rio(Fcall *fin, Fcall *fout)
void
usage(void)
{
fprint(2, "usage: iostats [-dC] [-f debugfile] cmds [args ...]\n");
fprint(2, "usage: iostats [-dC] cmds [args ...]\n");
exits("usage");
}
@ -259,7 +258,6 @@ main(int argc, char **argv)
{
Rpc *rpc;
ulong ttime;
char *dbfile;
char buf[64*1024];
float brpsec, bwpsec, bppsec;
int cpid, fspid, expid, rspid, dbg, n, mflag;
@ -270,15 +268,11 @@ main(int argc, char **argv)
dbg = 0;
mflag = MREPL;
dbfile = DEBUGFILE;
ARGBEGIN{
case 'd':
dbg++;
break;
case 'f':
dbfile = ARGF();
break;
case 'C':
mflag |= MCACHE;
break;
@ -286,8 +280,6 @@ main(int argc, char **argv)
usage();
}ARGEND
USED(dbfile);
if(argc == 0)
usage();
@ -359,7 +351,7 @@ main(int argc, char **argv)
close(efd[1]);
close(pfd[1]);
if(dbg){
execl("/bin/exportfs", "exportfs", "-df", dbfile, "-r", "/", nil);
execl("/bin/exportfs", "exportfs", "-d", "-r", "/", nil);
} else {
execl("/bin/exportfs", "exportfs", "-r", "/", nil);
}