shithub: gefs

Download patch

ref: 50609183e154ee4b88ce36c24c89df81be6d1e8b
parent: f07ada305d9acac789b8fcf6e3a00557ca7de112
author: Ori Bernstein <ori@eigenstate.org>
date: Sat Nov 4 15:25:31 EDT 2023

ream: separate out the mutable trees from the forked empty tree

--- a/check.c
+++ b/check.c
@@ -122,8 +122,7 @@
 			switch(my.op){
 			case Oinsert:	/* new kvp */
 			case Odelete:	/* delete kvp */
-			case Oclearb:	/* delete kvp if exists */
-			case Oclearb:	/* free block ptr if exists */
+			case Oclearb:	/* delete bp if exists */
 			case Oclobber:	/* remove file if it exists */
 				break;
 			case Owstat:		/* kvp dirent */
--- a/ream.c
+++ b/ream.c
@@ -104,18 +104,19 @@
 	setval(s, &kv);
 	lbl2kv("empty", 0, 0, &kv, buf, sizeof(buf));
 	setval(s, &kv);
-	lbl2kv("main", 0, Lmut, &kv, buf, sizeof(buf));
+	lbl2kv("main", 2, Lmut, &kv, buf, sizeof(buf));
 	setval(s, &kv);
 
 	p = buf;
 	e = p + sizeof(buf);
 
+	/* empty */
 	kv.k = p;
 	p = packsnap(buf, e - p, 0);
 	kv.nk = p - kv.k;
-
 	kv.v = p;
 	memset(&t, 0, sizeof(Tree));
+	t.flag = Tforked;
 	t.nsucc = 1;
 	t.nlbl = 2;
 	t.ht = 1;
@@ -129,10 +130,10 @@
 	p = buf;
 	e = p + sizeof(buf);
 
+	/* adm */
 	kv.k = p;
 	p = packsnap(p, e - p, 1);
 	kv.nk = p - kv.k;
-
 	kv.v = p;
 	memset(&t, 0, sizeof(Tree));
 	t.nsucc = 0;
@@ -141,6 +142,25 @@
 	t.gen = fs->nextgen++;
 	t.prev = -1ULL;
 	t.bp = a->bp;
+	p = packtree(p, e - p, &t);
+	kv.nv = p - kv.v;
+	setval(s, &kv);
+
+	p = buf;
+	e = p + sizeof(buf);
+
+	/* main */
+	kv.k = p;
+	p = packsnap(buf, e - p, 2);
+	kv.nk = p - kv.k;
+	kv.v = p;
+	memset(&t, 0, sizeof(Tree));
+	t.nsucc = 1;
+	t.nlbl = 1;
+	t.ht = 1;
+	t.gen = fs->nextgen++;
+	t.prev = -1ULL;
+	t.bp = r->bp;
 	p = packtree(p, e - p, &t);
 	kv.nv = p - kv.v;
 	setval(s, &kv);