code: mafs

Download patch

ref: f37c3c60d0eff2125db1beb476ced0fd0b6b1592
parent: b682b7eb92eac118212e711590277cf432a65710
author: 9ferno <gophone2015@gmail.com>
date: Fri Oct 14 02:31:05 EDT 2022

fixes

--- a/9p.c
+++ b/9p.c
@@ -1267,8 +1267,8 @@
 	if((lastspansize=d->size%Maxspansize) == 0){
 		/* last extent is full, use a new extent */
 		if(chatty9p)
-		dprint("append new extent rel2abs d->name %s reli d->size %llud\n"
-				"	d->size/Maxspansize %llud\n",
+		dprint("append new extent rel2abs d->name %s reli d->size %llud"
+				" d->size/Maxspansize %llud\n",
 				d->name, d->size, d->size/Maxspansize);
 		nblocks = min(Maxspanlen, (wbufsize+sizeof(Tag))/Rawblocksize);
 		if((wbufsize+sizeof(Tag))%Rawblocksize > 0)
@@ -1300,12 +1300,12 @@
 		oldnblocks = s.len;
 		if(s.len == 0)
 			panic("append update rel2abs s.len == 0"
-					"	d->name %s reli d->size %llud\n"
-					"	d->size/Maxspansize %llud s.blkno %llud s.len %d\n",
+					" d->name %s reli d->size %llud"
+					" d->size/Maxspansize %llud s.blkno %llud s.len %d\n",
 					d->name, d->size, d->size/Maxspansize, s.blkno, s.len);
 		if(chatty9p)
-		dprint("append update rel2abs d->name %s reli d->size %llud\n"
-				"	d->size/Maxspansize %llud s.blkno %llud s.len %d\n",
+		dprint("append update rel2abs d->name %s reli d->size %llud"
+				" d->size/Maxspansize %llud s.blkno %llud s.len %d\n",
 				d->name, d->size, d->size/Maxspansize, s.blkno, s.len);
 		buf = getbufchk(blkno, oldnblocks, Bmod, Tdata, d->qid.path);
 		if(buf == nil)
@@ -1327,8 +1327,8 @@
 		memcpy(nbuf->io->buf, buf->io->buf, lastspansize);
 		howmuch = min(Maxspansize-lastspansize, wbufsize);
 		if(chatty9p)
-		dprint("update lastspansize %llud newnblocks %llud\n"
-				"	nblkno %llud howmuch %llud\n",
+		dprint("update lastspansize %llud newnblocks %llud"
+				" nblkno %llud howmuch %llud\n",
 				lastspansize, newnblocks, nblkno, howmuch);
 		memcpy(nbuf->io->buf+lastspansize, wbuf, howmuch);
 		// if(chatty9p)dprint("append contents: %s\n", nbuf->io->buf);
--- a/dentry.c
+++ b/dentry.c
@@ -478,7 +478,7 @@
 			}
 		}else if(idx == searchidx){
 			if(chatty9p > 2)
-			dprint("searchdir: found index %s\n", searchidx);
+			dprint("searchdir: found index %d\n", searchidx);
 			return ch;
 		}
 
--- a/docs/mafs.ms
+++ b/docs/mafs.ms
@@ -136,7 +136,7 @@
 	Tind0,		/* list of Tdata Spans for files or Tdentry Spans for directories.*/
 	Tind1,		/* list of Tind0 blocks */
 	Tind2,		/* list of Tind1 blocks */
-	Tind3,		/* list of Tind2 blocks. we can have a 12 TB file */
+	Tind3,		/* list of Tind2 blocks. we can have a 11 TB file */
 };
 .sp
 A Span is stored to the disk with a Tag.
@@ -1134,8 +1134,9 @@
 .nf
 .in 3n
 : tests ; ./6.sizes
-Namelen 174 Ndspan 24 Niblock 4
-Blocksize 500 Nspanperblock 50 Nindperblock 62
+Namelen 174 Ndspanid 24 Niblock 4
+Blocksize 500 Nspanidperblock 50 Nindperblock 62
+Maxspanlen 2048 Maxspansize 1048564
 A Tind0 unit points to 1 data spans (1048564 bytes)
 	block points to 50 data spans
 A Tind1 unit points to 50 data spans (52428200 bytes)
@@ -1152,7 +1153,7 @@
 maxsize Tind3 11916400 max 12111774
 maximum possible spans 12111774
 	(12111774*Maxspansize = 12699970192536 bytes)
-	(12111774*Maxspansize = 12699970192536 bytes = 12 TB)
+	(12111774*Maxspansize = 12699970192536 bytes = 11 TB)
 .fi
 .in 0
 .sp
binary files a/docs/mafs.pdf b/docs/mafs.pdf differ
--- a/extents.c
+++ b/extents.c
@@ -27,6 +27,12 @@
  * By default, only one line is logged for each alloc, free, and realloc.
  */
 
+/* TODO
+	using this flag to avoid chatty9p from filling up stdout with messages
+	there must be a better way of doing this. Need to figure that out.
+ */
+int debug = 0;
+
 Extent *sortbysize(Extents *es, Extent *e);
 void	showextent(char *pre, Extent *e);
 
@@ -83,7 +89,7 @@
 {
 	Extent *dsmall, *fbig, *f, *d;
 
-	if(chatty9p)
+	if(chatty9p && debug)
 		print("	+size %llud .. %llud\n", e->blkno, e->blkno+e->len-1);
 
 	for(f = d = smallest(es);
@@ -124,7 +130,7 @@
 	c->blkno = blkno;
 	c->len = len;
 	es->n++;
-	if(chatty9p)
+	if(chatty9p && debug)
 		print("	+%llud .. %llud\n", blkno, blkno+len-1);
 
 	if(blkno < e->blkno){
@@ -306,7 +312,7 @@
 	/* using the previously used extent */
 	e = es->lru;
 	dir = belongs(es->lru, blkno, len);
-	if(chatty9p){
+	if(chatty9p && debug){
 		print(" 	belongs(e %llud %llud blkno %llud .. %llud) %d\n",
 			 e->blkno, e->blkno+e->len-1, blkno, blkno+len-1, dir);
 	}
@@ -355,13 +361,13 @@
 {
 	Extent *e;
 
-	if(chatty9p)
+	if(chatty9p && debug){
 		showextents("		before\n", es);
-	if(chatty9p)
 		print(" +%llud %llud\n", blkno, len);
+	}
 	e = doadd(es, blkno, len);
 	es->lru = e;
-	if(chatty9p)
+	if(chatty9p && debug)
 		showextents("		after\n", es);
 	return e;
 }
@@ -444,12 +450,12 @@
 
 	if(es == nil)
 		panic("balloc: es == nil");
-	if(chatty9p){
+	blkno = 0;
+	qlock(&es->el);
+	if(chatty9p && debug){
 		snprint(msg, 64, "balloc() %llud blocks:\n", n);
 		showextents(msg, es);
 	}
-	blkno = 0;
-	qlock(&es->el);
 	for(e = smallest(es); e != nil && e->len < n; e = e->big)
 		;
 	if(e == nil){
--- a/mafs.c
+++ b/mafs.c
@@ -93,7 +93,7 @@
 		sysfatal("no disk file");
 
 	if(chatty9p){
-		print("\nPlan 9 %d-bit file server with %d-deep indirect blocks\n",
+		dprint("\nPlan 9 %d-bit file server with %d-deep indirect blocks\n",
 			sizeof(u64)*8, Niblock);
 		printsizes();
 	}
@@ -150,7 +150,7 @@
 
 	i = f.nfilter;
 	if(i >= sizeof f.filters / sizeof f.filters[0]) {
-		print("dofilter: too many filters\n");
+		dprint("dofilter: too many filters\n");
 		return;
 	}
 	f.filters[i] = ft;
@@ -195,11 +195,11 @@
 	int i;
 	uvlong max = Ndspanid, ind;
 
-	print("maxsize direct spans max %llud\n", max);
+	dprint("maxsize direct spans max %llud\n", max);
 	for (i = 0; i < Niblock; i++) {
 		ind = nperiblock(Tind0+i);
 		max += ind;
-		print("maxsize %s %llud max %llud\n", tagnames[Tind0+i], ind, max);
+		dprint("maxsize %s %llud max %llud\n", tagnames[Tind0+i], ind, max);
 	}
 	return max;
 }
@@ -211,23 +211,26 @@
 	int i;
 	u64 spans, max;
 
-	print("Namelen %d Ndspanid %d Niblock %d\n", Namelen, Ndspanid, Niblock);
-	print("Blocksize %d Nspanidperblock %d Nindperblock %d\n",
+	dprint("Namelen %d Ndspanid %d Niblock %d\n", Namelen, Ndspanid, Niblock);
+	dprint("Blocksize %d Nspanidperblock %d Nindperblock %d\n",
 			Blocksize, Nspanidperblock, Nindperblock);
+	dprint("Maxspanlen %llud Maxspansize %llud\n",
+			Maxspanlen, Maxspansize);
+
 	spans = nperindunit(Tind0);
-	print("A %s unit points to %lld data spans (%llud bytes)\n",
+	dprint("A %s unit points to %lld data spans (%llud bytes)\n",
 			 tagnames[Tind0], spans, spans*Maxspansize);
-	print("	block points to %lld data spans\n", nperiblock(Tind0));
+	dprint("	block points to %lld data spans\n", nperiblock(Tind0));
 	for (i = Tind1; i < Maxtind; i++) {
 		spans = nperindunit(i);
-		print("A %s unit points to %lld data spans (%llud bytes)\n",
+		dprint("A %s unit points to %lld data spans (%llud bytes)\n",
 			 tagnames[i], spans, spans*Maxspansize);
-		print("	block points to %lld data spans\n", nperiblock(i));
+		dprint("	block points to %lld data spans\n", nperiblock(i));
 	}
-	print("sizeof(Dentry1) %d Namelen %d\n",
+	dprint("sizeof(Dentry1) %d Namelen %d\n",
 			sizeof(Dentry1), Namelen);
 	max = maxsize();
-	print("maximum possible spans %llud\n", max);
-	print("	(%llud*Maxspansize = %llud bytes = %llud TB)\n",
+	dprint("maximum possible spans %llud\n", max);
+	dprint("	(%llud*Maxspansize = %llud bytes = %llud TB)\n",
 			max, max*Maxspansize, (max*Maxspansize)/(MB*MB));
 }
--- a/tests/sizes.c
+++ b/tests/sizes.c
@@ -100,6 +100,9 @@
 	print("Namelen %d Ndspanid %d Niblock %d\n", Namelen, Ndspanid, Niblock);
 	print("Blocksize %d Nspanidperblock %d Nindperblock %d\n",
 			Blocksize, Nspanidperblock, Nindperblock);
+	print("Maxspanlen %llud Maxspansize %llud\n",
+			Maxspanlen, Maxspansize);
+
 	spans = nperindunit(Tind0);
 	print("A %s unit points to %lld data spans (%llud bytes)\n",
 			 tagnames[Tind0], spans, spans*Maxspansize);