code: plan9front

Download patch

ref: 0f58e47551345d7c48c9404bc4188f7fc195e51a
parent: 8c228a123fa0c6062570964011854302bbf57242
author: amavect <amavect@gmail.com>
date: Wed Aug 18 13:51:40 EDT 2021

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.
---

--- a/sys/man/4/exportfs
+++ b/sys/man/4/exportfs
@@ -4,8 +4,24 @@
 .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 @@
 .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.
--- a/sys/man/4/iostats
+++ b/sys/man/4/iostats
@@ -7,9 +7,6 @@
 .B -d
 ] [
 .B -C
-] [
-.B -f
-.I dbfile
 ]
 .I cmd
 [
@@ -17,7 +14,7 @@
 ]
 .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 @@
 .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 @@
 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
--- a/sys/man/4/oexportfs
+++ b/sys/man/4/oexportfs
@@ -26,11 +26,8 @@
 .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.
--- a/sys/src/cmd/exportfs/exportfs.c
+++ b/sys/src/cmd/exportfs/exportfs.c
@@ -10,8 +10,8 @@
 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");
 }
 
@@ -18,10 +18,8 @@
 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 @@
 		dbg++;
 		break;
 
-	case 'f':
-		dbfile = EARGF(usage());
-		break;
-
 	case 'm':
 		messagesize = strtoul(EARGF(usage()), nil, 0);
 		break;
@@ -82,14 +76,8 @@
 
 	exclusions();
 
-	if(dbg) {
-		n = create(dbfile, OWRITE|OTRUNC, 0666);
-		dup(n, DFD);
-		close(n);
-	}
+	DEBUG(2, "exportfs: started\n");
 
-	DEBUG(DFD, "exportfs: started\n");
-
 	rfork(RFNOTEG|RFREND);
 
 	if(messagesize == 0){
@@ -106,13 +94,13 @@
 			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();
 }
--- a/sys/src/cmd/exportfs/exportfs.h
+++ b/sys/src/cmd/exportfs/exportfs.h
@@ -3,7 +3,6 @@
  */
 
 #define DEBUG		if(!dbg){}else fprint
-#define DFD		9
 #define fidhash(s)	fhash[s%FHASHSIZE]
 
 typedef struct Fsrpc Fsrpc;
--- a/sys/src/cmd/exportfs/exportsrv.c
+++ b/sys/src/cmd/exportfs/exportsrv.c
@@ -65,7 +65,7 @@
 		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 @@
 	}
 
 	reply(&t->work, &rhdr, 0);
-	DEBUG(DFD, "\tflush reply\n");
+	DEBUG(2, "\tflush reply\n");
 	putsbuf(t);
 }
 
@@ -359,7 +359,7 @@
 	}
 
 	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 @@
 		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 @@
 	}
 	
 	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 @@
 			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 @@
 		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 @@
 		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);
--- a/sys/src/cmd/exportfs/io.c
+++ b/sys/src/cmd/exportfs/io.c
@@ -49,7 +49,7 @@
 		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 @@
 	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 @@
 
 	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 @@
 	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 @@
 	}
 	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 @@
 		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);
--- a/sys/src/cmd/exportfs/oexportfs.c
+++ b/sys/src/cmd/exportfs/oexportfs.c
@@ -59,7 +59,7 @@
 		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 @@
 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 @@
 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 @@
 			ealgs = nil;
 		break;
 
-	case 'f':
-		dbfile = EARGF(usage());
-		break;
-
 	case 'k':
 		keyspec = EARGF(usage());
 		break;
@@ -254,18 +249,12 @@
 
 	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 @@
 		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,7 +290,7 @@
 		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;
@@ -308,15 +297,15 @@
 		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 @@
 
 		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();
--- a/sys/src/cmd/exportfs/pattern.c
+++ b/sys/src/cmd/exportfs/pattern.c
@@ -42,7 +42,7 @@
 				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 @@
 				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 @@
 	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 @@
 	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 @@
 			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;
--- a/sys/src/cmd/iostats.c
+++ b/sys/src/cmd/iostats.c
@@ -6,7 +6,6 @@
 #include <auth.h>
 #include <fcall.h>
 
-#define DEBUGFILE	"iostats.out"
 #define DONESTR		"done"
 
 enum{
@@ -250,7 +249,7 @@
 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 @@
 {
 	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 @@
 
 	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 @@
 		usage();
 	}ARGEND
 
-	USED(dbfile);
-
 	if(argc == 0)
 		usage();
 
@@ -359,7 +351,7 @@
 		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);
 		}