9front - general discussion about 9front
 help / color / mirror / Atom feed
* Re: [9front] exportfs: fix debug logging
@ 2021-08-13  6:46 unobe
  2021-08-13 11:15 ` Amavect
  2021-08-14 20:14 ` Stuart Morrow
  0 siblings, 2 replies; 22+ messages in thread
From: unobe @ 2021-08-13  6:46 UTC (permalink / raw)
  To: 9front

Quoth Amavect <amavect@gmail.com>:
> All,
> 
> Exportfs -d might not be able to create the debug file without
> permission. Instead of letting execution continue, patch 1 makes it
> fail.
> ...
> --- //.git/fs/object/bf6769d3f09d51ff1096afa664c10d3313341a75/tree/sys/src/cmd/exportfs/exportfs.c
> +++ sys/src/cmd/exportfs/exportfs.c
> @@ -19,12 +19,12 @@
>  main(int argc, char **argv)
>  {
>  	char *dbfile, *srv, *srvfdfile;
> -	int n;
>  
>  	dbfile = "/tmp/exportdb";
>  	srv = nil;
>  	srvfd = -1;
>  	srvfdfile = nil;
> +	int n;
>  
>  	ARGBEGIN{
>  	case 'd':

I know you already created a different patch, but this part of the
patch looks pointless, but I don't program in C a lot so maybe I can
learn something new.  I thought declarations generally go together, so
why move this one declaration down to after initializations?


^ permalink raw reply	[flat|nested] 22+ messages in thread
* [9front] exportfs: fix debug logging
@ 2021-08-13  1:11 Amavect
  2021-08-13 19:11 ` ori
  0 siblings, 1 reply; 22+ messages in thread
From: Amavect @ 2021-08-13  1:11 UTC (permalink / raw)
  To: 9front

[-- Attachment #1: Type: text/plain, Size: 257 bytes --]

All,

Exportfs -d might not be able to create the debug file without
permission. Instead of letting execution continue, patch 1 makes it
fail.
Patch 2 replaces the DFD macro with an int dfd, simplifying code by 3
lines. Depends on patch 1.

Thanks,
Amavect

[-- Attachment #2: create.1.diff --]
[-- Type: text/x-patch, Size: 514 bytes --]

--- //.git/fs/object/bf6769d3f09d51ff1096afa664c10d3313341a75/tree/sys/src/cmd/exportfs/exportfs.c
+++ sys/src/cmd/exportfs/exportfs.c
@@ -19,12 +19,12 @@
 main(int argc, char **argv)
 {
 	char *dbfile, *srv, *srvfdfile;
-	int n;
 
 	dbfile = "/tmp/exportdb";
 	srv = nil;
 	srvfd = -1;
 	srvfdfile = nil;
+	int n;
 
 	ARGBEGIN{
 	case 'd':
@@ -84,6 +84,8 @@
 
 	if(dbg) {
 		n = create(dbfile, OWRITE|OTRUNC, 0666);
+		if(n < 0)
+			fatal("cannot create debug log: %r", dbfile);
 		dup(n, DFD);
 		close(n);
 	}


[-- Attachment #3: nomacro.2.diff --]
[-- Type: text/x-patch, Size: 8792 bytes --]

--- //.git/fs/object/633dcc8c1cbdc9191e50c3639d8c908fafa32470/tree/sys/src/cmd/exportfs/exportfs.c
+++ sys/src/cmd/exportfs/exportfs.c
@@ -24,7 +24,6 @@
 	srv = nil;
 	srvfd = -1;
 	srvfdfile = nil;
-	int n;
 
 	ARGBEGIN{
 	case 'd':
@@ -83,14 +82,12 @@
 	exclusions();
 
 	if(dbg) {
-		n = create(dbfile, OWRITE|OTRUNC, 0666);
-		if(n < 0)
+		dfd = create(dbfile, OWRITE|OTRUNC, 0666);
+		if(dfd < 0)
 			fatal("cannot create debug log: %r", dbfile);
-		dup(n, DFD);
-		close(n);
 	}
 
-	DEBUG(DFD, "exportfs: started\n");
+	DEBUG(dfd, "exportfs: started\n");
 
 	rfork(RFNOTEG|RFREND);
 
@@ -108,13 +105,13 @@
 			char ebuf[ERRMAX];
 			ebuf[0] = '\0';
 			errstr(ebuf, sizeof ebuf);
-			DEBUG(DFD, "chdir(\"%s\"): %s\n", srv, ebuf);
+			DEBUG(dfd, "chdir(\"%s\"): %s\n", srv, ebuf);
 			mounterror(ebuf);
 		}
-		DEBUG(DFD, "invoked as server for %s", srv);
+		DEBUG(dfd, "invoked as server for %s", srv);
 	}
 
-	DEBUG(DFD, "\niniting root\n");
+	DEBUG(dfd, "\niniting root\n");
 	initroot();
 	io();
 }
--- //.git/fs/object/633dcc8c1cbdc9191e50c3639d8c908fafa32470/tree/sys/src/cmd/exportfs/exportfs.h
+++ 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;
@@ -86,6 +85,7 @@
 char Enopsmt[];
 
 Extern int  	dbg;
+Extern int	dfd;
 Extern File	*root;
 Extern File	*psmpt;
 Extern Fid	**fhash;
--- //.git/fs/object/633dcc8c1cbdc9191e50c3639d8c908fafa32470/tree/sys/src/cmd/exportfs/exportsrv.c
+++ 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(dfd, "\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(dfd, "\tflush reply\n");
 	putsbuf(t);
 }
 
@@ -359,7 +359,7 @@
 	}
 
 	path = makepath(f->f, "");
-	DEBUG(DFD, "\tremove: %s\n", path);
+	DEBUG(dfd, "\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(dfd, "\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(dfd, "\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(dfd, "\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(dfd, "\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(dfd, "\twrite: %d bytes fd=%d\n", n, f->fid);
 
 	rhdr.count = n;
 	reply(work, &rhdr, 0);
--- //.git/fs/object/633dcc8c1cbdc9191e50c3639d8c908fafa32470/tree/sys/src/cmd/exportfs/io.c
+++ 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(dfd, "%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(dfd, "\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(dfd, "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(dfd, "\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(dfd, "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(dfd, "collision wraparound\n");
 			newqid = 1;
 		}
 		path |= newqid<<48;
-		DEBUG(DFD, "assign qid %.16llux\n", path);
+		DEBUG(dfd, "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(dfd, "%s\n", buf);
 		sysfatal("%s", buf);	/* caution: buf could contain '%' */
 	} else
 		exits(nil);
--- //.git/fs/object/633dcc8c1cbdc9191e50c3639d8c908fafa32470/tree/sys/src/cmd/exportfs/oexportfs.c
+++ sys/src/cmd/exportfs/oexportfs.c
@@ -59,7 +59,7 @@
 		strecpy(strrchr(addr, '!'), addr+sizeof(addr), s);
 	}
 
-	DEBUG(DFD, "filter: %s\n", addr);
+	DEBUG(dfd, "filter: %s\n", addr);
 
 	snprint(buf, sizeof(buf), "%s", cmd);
 	argc = tokenize(buf, argv, nelem(argv)-3);
@@ -256,7 +256,7 @@
 
 	if(dbg) {
 		n = create(dbfile, OWRITE|OTRUNC, 0666);
-		dup(n, DFD);
+		dup(n, dfd);
 		close(n);
 	}
 
@@ -265,7 +265,7 @@
 		usage();
 	}
 
-	DEBUG(DFD, "%s: started\n", argv0);
+	DEBUG(dfd, "%s: started\n", argv0);
 
 	rfork(RFNOTEG|RFREND);
 
@@ -289,10 +289,10 @@
 		if(chdir(srv) < 0) {
 			ebuf[0] = '\0';
 			errstr(ebuf, sizeof ebuf);
-			DEBUG(DFD, "chdir(\"%s\"): %s\n", srv, ebuf);
+			DEBUG(dfd, "chdir(\"%s\"): %s\n", srv, ebuf);
 			mounterror(ebuf);
 		}
-		DEBUG(DFD, "invoked as server for %s", srv);
+		DEBUG(dfd, "invoked as server for %s", srv);
 		strncpy(buf, srv, sizeof buf);
 	}
 	else {
@@ -301,7 +301,7 @@
 		if(n < 0) {
 			errstr(buf, sizeof buf);
 			fprint(0, "read(0): %s\n", buf);
-			DEBUG(DFD, "read(0): %s\n", buf);
+			DEBUG(dfd, "read(0): %s\n", buf);
 			exits(buf);
 		}
 		buf[n] = 0;
@@ -308,15 +308,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(dfd, "chdir(%d:\"%s\"): %s\n", n, buf, ebuf);
 			exits(ebuf);
 		}
 	}
 
-	DEBUG(DFD, "\niniting root\n");
+	DEBUG(dfd, "\niniting root\n");
 	initroot();
 
-	DEBUG(DFD, "%s: %s\n", argv0, buf);
+	DEBUG(dfd, "%s: %s\n", argv0, buf);
 
 	if(srv == nil && srvfd == -1 && write(0, "OK", 2) != 2)
 		fatal("open ack write");
@@ -436,7 +436,7 @@
 
 		if(convM2S(r->buf, n, &r->work) != n)
 			fatal("convM2S format error");
-		DEBUG(DFD, "%F\n", &r->work);
+		DEBUG(dfd, "%F\n", &r->work);
 		(fcalls[r->work.type])(r);
 	}
 	io();
--- //.git/fs/object/633dcc8c1cbdc9191e50c3639d8c908fafa32470/tree/sys/src/cmd/exportfs/pattern.c
+++ 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(dfd, "\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(dfd, "\texclude %s\n", line+2);
 			exclude[ne] = regcomp(line+2);
 			exclude[++ne] = nil;
 			break;
 		default:
-			DEBUG(DFD, "ignoring pattern %s\n", line);
+			DEBUG(dfd, "ignoring pattern %s\n", line);
 			break;
 		}
 	}
@@ -76,16 +76,16 @@
 	else
 		p = path+1;
 
-	DEBUG(DFD, "checking %s\n", p);
+	DEBUG(dfd, "checking %s\n", p);
 	for(re = include; *re != nil; re++){
 		if(regexec(*re, p, nil, 0) != 1){
-			DEBUG(DFD, "excluded+ %s\n", p);
+			DEBUG(dfd, "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(dfd, "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(dfd, "\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(dfd, "\t\tconvD2M %d\n", m);
 		if(m <= BIT16SZ){
-			DEBUG(DFD, "\t\t\tneeded %d\n", GBIT16(data));
+			DEBUG(dfd, "\t\t\tneeded %d\n", GBIT16(data));
 			/* not enough room for full entry; leave for next time */
 			f->cdir--;
 			return r;


^ permalink raw reply	[flat|nested] 22+ messages in thread

end of thread, other threads:[~2021-08-18 23:25 UTC | newest]

Thread overview: 22+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-08-13  6:46 [9front] exportfs: fix debug logging unobe
2021-08-13 11:15 ` Amavect
2021-08-14 20:14 ` Stuart Morrow
2021-08-15 16:40   ` kvik
2021-08-15 20:44     ` Stuart Morrow
2021-08-16 20:17       ` Humm
  -- strict thread matches above, loose matches on Subject: below --
2021-08-13  1:11 Amavect
2021-08-13 19:11 ` ori
2021-08-14 22:04   ` Amavect
2021-08-15 16:29     ` kvik
2021-08-16  4:40       ` unobe
2021-08-16  5:20         ` ori
2021-08-16 16:49           ` unobe
2021-08-16 13:55         ` kvik
2021-08-16 16:50           ` unobe
2021-08-16 17:56           ` Amavect
2021-08-16 19:32             ` ori
2021-08-16 22:48               ` ori
2021-08-18 14:24                 ` cinap_lenrek
2021-08-18 14:49                   ` k m
2021-08-16 20:19             ` Steve Simon
2021-08-16 23:26             ` ori

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).