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);