Browse Source

Plan 9 from Bell Labs 2004-03-30

David du Colombier 20 years ago
parent
commit
b489a3a73d

+ 9 - 9
dist/replica/plan9.db

@@ -5061,7 +5061,7 @@ sys/man/8/cpurc - 664 sys sys 971455510 1275
 sys/man/8/cron - 664 sys sys 1063858596 1867
 sys/man/8/dhcpd - 664 sys sys 1032654987 5237
 sys/man/8/drawterm - 664 sys sys 958419689 2458
-sys/man/8/fossilcons - 664 sys sys 1072705694 15161
+sys/man/8/fossilcons - 664 sys sys 1080590977 16286
 sys/man/8/fs - 664 sys sys 1055701170 15029
 sys/man/8/fsconfig - 664 sys sys 1045501600 8142
 sys/man/8/httpd - 664 sys sys 1065640802 6426
@@ -5351,7 +5351,7 @@ sys/src/9/pc/etherwavelan.c - 664 sys sys 1026847642 3722
 sys/src/9/pc/floppy.h - 664 sys sys 1055700609 3835
 sys/src/9/pc/fns.h - 664 sys sys 1074785127 4299
 sys/src/9/pc/hcwAMC.h - 664 sys sys 1026860163 166004
-sys/src/9/pc/i8253.c - 664 sys sys 1074785126 6179
+sys/src/9/pc/i8253.c - 664 sys sys 1080572900 6240
 sys/src/9/pc/i8259.c - 664 sys sys 1015014519 4423
 sys/src/9/pc/init9.c - 664 sys sys 1040002518 94
 sys/src/9/pc/initcode.s - 664 sys sys 1015014519 282
@@ -7561,7 +7561,7 @@ sys/src/cmd/fossil/9auth.c - 664 sys sys 1061530721 3393
 sys/src/cmd/fossil/9dir.c - 664 sys sys 1072705704 2075
 sys/src/cmd/fossil/9excl.c - 664 sys sys 1042005502 1887
 sys/src/cmd/fossil/9fid.c - 664 sys sys 1045600016 5521
-sys/src/cmd/fossil/9fsys.c - 664 sys sys 1068591358 29979
+sys/src/cmd/fossil/9fsys.c - 664 sys sys 1080586882 30218
 sys/src/cmd/fossil/9lstn.c - 664 sys sys 1042005503 2865
 sys/src/cmd/fossil/9p.c - 664 sys sys 1077896346 21766
 sys/src/cmd/fossil/9ping.c - 664 sys sys 1042005503 1563
@@ -7569,7 +7569,7 @@ sys/src/cmd/fossil/9proc.c - 664 sys sys 1079034426 14680
 sys/src/cmd/fossil/9srv.c - 664 sys sys 1077896346 3879
 sys/src/cmd/fossil/9user.c - 664 sys sys 1071179088 17260
 sys/src/cmd/fossil/Ccli.c - 664 sys sys 1042005504 1624
-sys/src/cmd/fossil/Ccmd.c - 664 sys sys 1066098098 7244
+sys/src/cmd/fossil/Ccmd.c - 664 sys sys 1080586882 7982
 sys/src/cmd/fossil/Ccons.c - 664 sys sys 1055703737 6620
 sys/src/cmd/fossil/Clog.c - 664 sys sys 1042005505 591
 sys/src/cmd/fossil/archive.c - 664 sys sys 1072705705 9558
@@ -7587,15 +7587,15 @@ sys/src/cmd/fossil/error.c - 664 sys sys 1073851927 1450
 sys/src/cmd/fossil/error.h - 664 sys sys 1073851928 796
 sys/src/cmd/fossil/file.c - 664 sys sys 1073140359 30215
 sys/src/cmd/fossil/flchk.c - 664 sys sys 1061530720 14296
-sys/src/cmd/fossil/flfmt.c - 664 sys sys 1072705703 10799
-sys/src/cmd/fossil/flfmt9660.c - 664 sys sys 1072830620 12304
+sys/src/cmd/fossil/flfmt.c - 664 sys sys 1080586881 10753
+sys/src/cmd/fossil/flfmt9660.c - 664 sys sys 1080586883 12314
 sys/src/cmd/fossil/flfmt9660.h - 664 sys sys 1072830621 134
 sys/src/cmd/fossil/flproto - 664 sys sys 1042005508 210
 sys/src/cmd/fossil/fns.h - 664 sys sys 1072705709 3168
 sys/src/cmd/fossil/fossil-acid - 664 sys sys 1042005508 3965
 sys/src/cmd/fossil/fossil.c - 664 sys sys 1077896345 2435
-sys/src/cmd/fossil/fs.c - 664 sys sys 1072705707 21071
-sys/src/cmd/fossil/fs.h - 664 sys sys 1072705709 1489
+sys/src/cmd/fossil/fs.c - 664 sys sys 1080586883 21525
+sys/src/cmd/fossil/fs.h - 664 sys sys 1080586883 1503
 sys/src/cmd/fossil/history - 664 sys sys 1055703793 1400
 sys/src/cmd/fossil/invariants - 664 sys sys 1042005509 4073
 sys/src/cmd/fossil/mkfile - 664 sys sys 1072830618 2103
@@ -9764,7 +9764,7 @@ sys/src/cmd/mv.c - 664 sys sys 1014926695 4276
 sys/src/cmd/ndb - 20000000775 sys sys 988249988 0
 sys/src/cmd/ndb/convDNS2M.c - 664 sys sys 1060612175 6862
 sys/src/cmd/ndb/convM2DNS.c - 664 sys sys 1060612175 7248
-sys/src/cmd/ndb/cs.c - 664 sys sys 1080504975 33075
+sys/src/cmd/ndb/cs.c - 664 sys sys 1080572749 32985
 sys/src/cmd/ndb/csgetval.c - 664 sys sys 957402051 1051
 sys/src/cmd/ndb/csquery.c - 664 sys sys 1014926159 1062
 sys/src/cmd/ndb/dblookup.c - 664 sys sys 1078927860 18090

+ 10 - 0
dist/replica/plan9.log

@@ -14771,3 +14771,13 @@
 1080496911 0 c sys/games/lib/fortunes - 664 sys sys 1080495629 248306
 1080500511 0 c sys/src/libc/9sys/dial.c - 664 sys sys 1080498909 3837
 1080505912 0 c sys/src/cmd/ndb/cs.c - 664 sys sys 1080504975 33075
+1080574325 0 c sys/src/9/pc/i8253.c - 664 sys sys 1080572900 6240
+1080574325 1 c sys/src/cmd/ndb/cs.c - 664 sys sys 1080572749 32985
+1080586927 0 c sys/src/cmd/fossil/9fsys.c - 664 sys sys 1080586882 30218
+1080586927 1 c sys/src/cmd/fossil/Ccmd.c - 664 sys sys 1080586882 7982
+1080586927 2 c sys/src/cmd/fossil/flfmt.c - 664 sys sys 1080586881 10753
+1080586927 3 c sys/src/cmd/fossil/flfmt9660.c - 664 sys sys 1080586883 12314
+1080586927 4 c sys/src/cmd/fossil/fs.c - 664 sys sys 1080586883 21525
+1080586927 5 c sys/src/cmd/fossil/fs.h - 664 sys sys 1080586883 1503
+1080588728 0 c sys/man/8/fossilcons - 664 sys sys 1080588009 16283
+1080592276 0 c sys/man/8/fossilcons - 664 sys sys 1080590977 16286

+ 65 - 1
sys/man/8/fossilcons

@@ -13,6 +13,13 @@ con /srv/fscons
 .I T-message
 ...
 .PP
+.B bind
+[
+.B -b|-a|-c|-bc|-ac
+]
+.I new
+.I old
+.PP
 .B dflag
 .PP
 .B echo
@@ -219,6 +226,23 @@ con /srv/fscons
 [
 .B -a
 ]
+[
+.B -s
+.I src
+]
+[
+.B -d
+.I dst
+]
+.PP
+[
+.B fsys
+.I name
+]
+.B snapclean
+[
+.I timeout
+]
 .PP
 [
 .B fsys
@@ -312,6 +336,13 @@ executes a 9P transaction; the arguments
 are in the same format used by
 .IR 9pcon (8).
 .PP
+.I Bind
+behaves similarly to
+.IR bind (1).
+It is useful when fossil
+is started without devices it needs configured
+into its namespace.
+.PP
 .I Dflag
 toggles the debug flag and prints the new setting.
 When the debug flag is set, all protocol messages
@@ -827,6 +858,28 @@ to take an archival snapshot, recording it in
 .BI /archive/ yyyy / mmdd \fR,
 also described in
 .IR fossil (4).
+By default the snapshot is taken of
+.BR /active ,
+the root of the active file system.
+The 
+.B -s
+flag specifies a different source path.
+The
+.B -d
+flag specifies a different destination path.
+These  two flags are useful together for moving snapshots into
+the archive tree.
+.PP
+.I Snapclean
+immediately discards all snapshots that are more than
+.I timeout
+minutes old.
+The default timeout is the one set by the
+.I snaptime
+command.
+The discarding is a one-time event rather than
+a recurring event as in
+.IR snaptime .
 .PP
 .I Snaptime
 displays and edits the times at which snapshots are automatically
@@ -836,9 +889,14 @@ An archival snapshot is taken once a day, at
 while temporary snapshots are taken at multiples of
 .I interval
 minutes.
-Temporary snapshots are discarded once they are
+Temporary snapshots are discarded after they are
 .I timeout
 minutes old.
+The snapshot cleanup runs every
+.I timeout
+minutes or once a day, whichever is more frequent,
+so snapshots may grow to an age of almost twice the timeout
+before actually being discarded.
 With no arguments,
 .I snaptime
 prints the current snapshot times.
@@ -976,3 +1034,9 @@ to it:
 uname sys :sys
 uname sys +rob
 .EE
+.PP
+To save an old (but not yet discarded) snapshot into the archive tree:
+.IP
+.EX
+snap -a -s /snapshot/2003/1220/0700 -d /archive/2003/1220
+.EE

+ 10 - 7
sys/src/9/pc/i8253.c

@@ -72,7 +72,6 @@ struct I8253
 };
 I8253 i8253;
 
-
 void
 i8253init(void)
 {
@@ -187,8 +186,6 @@ guesscpuhz(int aalcycles)
 	i8253.hz = Freq<<Tickshift;
 }
 
-ulong phist[128];
-
 void
 i8253timerset(uvlong next)
 {
@@ -210,8 +207,6 @@ i8253timerset(uvlong next)
 
 	/* hysteresis */
 	if(i8253.period != period){
-memmove(&phist[0], &phist[1], sizeof(phist)-sizeof(ulong));
-phist[nelem(phist)-1] = period;
 		ilock(&i8253);
 		/* load new value */
 		outb(Tmode, Load0|Square);
@@ -245,7 +240,7 @@ i8253link(void)
 }
 
 /*
- *  return the total ticks of counter 1.  We shift by
+ *  return the total ticks of counter 2.  We shift by
  *  8 to give timesync more wriggle room for interpretation
  *  of the frequency
  */
@@ -265,8 +260,16 @@ i8253read(uvlong *hz)
 
 	if(y < i8253.last)
 		x = i8253.last - y;
-	else
+	else {
 		x = i8253.last + (0x10000 - y);
+		if (x > 3*MaxPeriod) {
+			outb(Tmode, Load2|Square);
+			outb(T2cntr, 0);		/* low byte */
+			outb(T2cntr, 0);		/* high byte */
+			y = 0xFFFF;
+			x = i8253.period;
+		}
+	}
 	i8253.last = y;
 	i8253.ticks += x>>1;
 	ticks = i8253.ticks;

+ 13 - 2
sys/src/cmd/fossil/9fsys.c

@@ -330,8 +330,11 @@ static int
 fsysSnap(Fsys* fsys, int argc, char* argv[])
 {
 	int doarchive;
-	char *usage = "usage: [fsys name] snap [-a]";
+	char *usage = "usage: [fsys name] snap [-a] [-s /active] [-d /archive/yyyy/mmmm]";
+	char *src, *dst;
 
+	src = nil;
+	dst = nil;
 	doarchive = 0;
 	ARGBEGIN{
 	default:
@@ -339,11 +342,19 @@ fsysSnap(Fsys* fsys, int argc, char* argv[])
 	case 'a':
 		doarchive = 1;
 		break;
+	case 'd':
+		if((dst = ARGF()) == nil)
+			return cliError(usage);
+		break;
+	case 's':
+		if((src = ARGF()) == nil)
+			return cliError(usage);
+		break;
 	}ARGEND
 	if(argc)
 		return cliError(usage);
 
-	if(!fsSnapshot(fsys->fs, doarchive))
+	if(!fsSnapshot(fsys->fs, src, dst, doarchive))
 		return 0;
 
 	return 1;

+ 38 - 0
sys/src/cmd/fossil/Ccmd.c

@@ -395,6 +395,43 @@ cmdEcho(int argc, char* argv[])
 	return 1;
 }
 
+static int
+cmdBind(int argc, char* argv[])
+{
+	ulong flag = 0;
+	char *usage;
+
+	usage = "usage: bind [-b|-a|-c|-bc|-ac] new old";
+
+	ARGBEGIN{
+	case 'a':
+		flag |= MAFTER;
+		break;
+	case 'b':
+		flag |= MBEFORE;
+		break;
+	case 'c':
+		flag |= MCREATE;
+		break;
+	default:
+		return cliError(usage);
+	}ARGEND
+
+	if(argc != 2 || (flag&MAFTER)&&(flag&MBEFORE))
+		return cliError(usage);
+
+	if(bind(argv[0], argv[1], flag) < 0){
+		/* try to give a less confusing error than the default */
+		if(access(argv[0], 0) < 0)
+			return cliError("bind: %s: %r", argv[0]);
+		else if(access(argv[1], 0) < 0)
+			return cliError("bind: %s: %r", argv[1]);
+		else
+			return cliError("bind %s %s: %r", argv[0], argv[1]);
+	}
+	return 1;
+}
+
 int
 cmdInit(void)
 {
@@ -405,6 +442,7 @@ cmdInit(void)
 	cliAddCmd("9p", cmd9p);
 	cliAddCmd("dflag", cmdDflag);
 	cliAddCmd("echo", cmdEcho);
+	cliAddCmd("bind", cmdBind);
 
 	if(pipe(cbox.confd) < 0)
 		return 0;

+ 1 - 1
sys/src/cmd/fossil/flfmt.c

@@ -438,7 +438,7 @@ topLevel(char *name)
 	root = fsGetRoot(fs);
 	if(root == nil)
 		vtFatal("could not open root: %r");
-	addFile(root, "active", 0777);	/* BUG: add create command to Ccmd instead */
+	addFile(root, "active", 0555);
 	addFile(root, "archive", 0555);
 	addFile(root, "snapshot", 0555);
 	fileDecRef(root);

+ 1 - 1
sys/src/cmd/fossil/flfmt9660.c

@@ -379,7 +379,7 @@ iso9660copy(Fs *fs)
 	iso9660copydir(fs, root, (Cdir*)v->rootdir);
 	fileDecRef(root);
 	vtRUnlock(fs->elk);
-	if(!fsSnapshot(fs, 0))
+	if(!fsSnapshot(fs, nil, nil, 0))
 		vtFatal("snapshot failed: %R");
 	vtRLock(fs->elk);
 }

+ 26 - 8
sys/src/cmd/fossil/fs.c

@@ -227,14 +227,30 @@ superPut(Block* b, Super* super, int forceWrite)
  * TODO This should be rewritten to eliminate most of the duplication.
  */
 static File*
-fileOpenSnapshot(Fs *fs, int doarchive)
+fileOpenSnapshot(Fs *fs, char *dstpath, int doarchive)
 {
 	int n;
-	char buf[30], *s;
+	char buf[30], *s, *p, *elem;
 	File *dir, *f;
 	Tm now;
 
-	if(doarchive){
+	if(dstpath){
+		if((p = strrchr(dstpath, '/')) != nil){
+			*p++ = '\0';
+			elem = p;
+			p = dstpath;
+			if(*p == '\0')
+				p = "/";
+		}else{
+			p = "/";
+			elem = dstpath;
+		}
+		if((dir = fileOpen(fs, p)) == nil)
+			return nil;
+		f = fileCreate(dir, elem, ModeDir|ModeSnapshot|0555, "adm");
+		fileDecRef(dir);
+		return f;
+	}else if(doarchive){
 		/*
 		 * a snapshot intended to be archived to venti.
 		 */
@@ -475,7 +491,7 @@ saveQid(Fs *fs)
 }
 
 int
-fsSnapshot(Fs *fs, int doarchive)
+fsSnapshot(Fs *fs, char *srcpath, char *dstpath, int doarchive)
 {
 	File *src, *dst;
 
@@ -496,7 +512,9 @@ fsSnapshot(Fs *fs, int doarchive)
 	/*
 	 * Get the root of the directory we're going to save.
 	 */
-	src = fileOpen(fs, "/active");
+	if(srcpath == nil)
+		srcpath = "/active";
+	src = fileOpen(fs, srcpath);
 	if(src == nil)
 		goto Err;
 
@@ -552,7 +570,7 @@ fsSnapshot(Fs *fs, int doarchive)
 	/*
 	 * Create the directory where we will store the copy of src.
 	 */
-	dst = fileOpenSnapshot(fs, doarchive);
+	dst = fileOpenSnapshot(fs, dstpath, doarchive);
 	if(dst == nil)
 		goto Err;
 
@@ -978,7 +996,7 @@ snapEvent(void *v)
 	 */
 	if(s->snapMinutes != ~0 && s->snapMinutes != 0
 	&& now%s->snapMinutes==0 && now != s->lastSnap){
-		if(!fsSnapshot(s->fs, 0))
+		if(!fsSnapshot(s->fs, nil, nil, 0))
 			fprint(2, "fsSnapshot snap: %R\n");
 		s->lastSnap = now;
 	}
@@ -1000,7 +1018,7 @@ snapEvent(void *v)
 				need = 1;
 		}
 		if(need){
-			fsSnapshot(s->fs, 1);
+			fsSnapshot(s->fs, nil, nil, 1);
 			s->lastArch = now;
 		}
 	}

+ 1 - 1
sys/src/cmd/fossil/fs.h

@@ -13,7 +13,7 @@ enum {
 Fs *fsOpen(char*, VtSession*, long, int);
 void fsClose(Fs*);
 File *fsGetRoot(Fs*);
-int fsSnapshot(Fs*, int);
+int fsSnapshot(Fs*, char*, char*, int);
 void fsSnapshotRemove(Fs*);
 void fsSnapshotCleanup(Fs*, u32int);
 int fsSync(Fs*);

+ 0 - 2
sys/src/cmd/ndb/cs.c

@@ -1209,9 +1209,7 @@ lookup(Mfile *mf)
 		/*
 		 *  known network
 		 */
-syslog(0, logfile, "specific lookup %s", np->net);
 		nt = (*np->lookup)(np, mf->host, mf->serv, 1);
-syslog(0, logfile, "returned %p", nt);
 		for(t = nt; mf->nreply < Nreply && t; t = t->entry){
 			cp = (*np->trans)(t, np, mf->serv, mf->rem, 0);
 			if(cp){